Detailed Description of Validate Vin

This step validates a VIN (Vehicle Identification Number) and returns its verified value.

Note:

Using VIN as a resource for vehicle identification/validation can be misleading when additional information is missing. Currently, VIN is used by different manufacturers with more or less strict rules. The functional capabilities of this step are strongly dependent on the information of manufacturer codes, which are supplied using World Manufacturer Identifier (WMI) dictionaries.

Furthermore, the same manufacturer may use different VIN formats when developing different model series'. For example, The Czech company Skoda uses a check-sum number for its Octavia model series, however no check-sum is used for the Felicia model series.

The step considers a VIN as valid only if it satisfies the following conditions/properties:

This step checks the characters within the input VIN and, if the invalid characters I,O and Q are found, they are replaced with the numbers 1, 0 and 0 respectively.

Note:

The input value must be preprocessed to the appropriate format (i.e., transformed to uppercase and with no diacritics (accents) - a sample of the configuration needed for cleansing the data before using this step is in the example).

The step checks the validity of the CRC number, but only if recognition of the VIN type is possible. Recognition of the manufacturer is possible according to the manufacturer's name and model series. In addition, the CRC check-sum information can be derived. If such information is not discernible (if the VIN has an unknown CRC in the dictionary vinInfoFileName), the CRC is checked to see if it conforms to the US form of VIN, which must contain a CRC in the 9th position. Based on the value of the doRepair parameter, the step can repair an incorrect CRC (when used with setting of the VIN_CRC_FIXED flag).

If the manufacturer's name is available on input, it is compared with the name(s) derived from the WMI code of the given VIN - this comparison is diacritics (accents) insensitive and case insensitive. If the output manuOut is defined, the value of the ascertained/verified manufacturer's name is stored here - if it is unique for a given WMI. If it is not unique for a given WMI (more manufacturers exists for a given WMI), an empty value is stored, meaning that it was not possible to decide about the right error status. If validation is not successful, the appropriate flags are set and scored and the original value is written to output.

The step checks also the production year. This verification influences the final validation of the VIN only if the information about the year's position within the VIN is available (defined by the dictionary vinInfoLookupFile) and the production year is not missing. If such information is not available (the position is defined as unknown), the number in 10th position is considered to be the year and compared with the input value but with no influence on the validity of the VIN and the flag VIN_PY_GUESS is set. The year is not verified in cases when some other errors have been found within the VIN (i.e., the VIN has been found to be incorrect):

Manufacturers often use their own "model year" when marking the year within the VIN, which does not conform to the calendar year: it begins on the first of September in the previous year and ends the 31st of August in the current year. At the same time, it may occur that the value of year included in VIN is less than the current year. To eliminate such differences the step can, when validating the VIN, accept a year range plus or minus one year. This is considered as valid, and the flag VIN_YEAR_AROUND is set (if the attribute allowYearAround is set to true (which is the default value)).

Based on the verifications listed above, the VIN is written to the output in accordance with the setting of the omitInvalidVIN parameter. This parameter determines whether only VINs which have satisfied all tests (true) or VINs which did not satisfy all tests, are written to the output.


Top of page

Example: Example
<step id='cleaner' className='cz.adastra.cif.tasks.expressions.ColumnAssigner'>
        <properties>
        <assignments>
                <assignment column='cleanVin' expression='upper(removeAccents(in.vin))' />
        </assignments>
    </properties>
</step>
<connection className='cz.adastra.cif.model.elements.connections.StandardFlowConnection'>
        <source step='cleaner' endpoint='out'/>
        <target step='alg' endpoint='in'/>
</connection>
<step id='alg' className='cz.adastra.cif.tasks.clean.ValidateVinAlgorithm'>
        <properties>
                <vin>cleanVin</vin>
                <outVin>outVin</outVin>
                <outManu>outManu</outManu>
                <manu>cleanManu</manu>
                <year>year</year>
                <outYear>outYear</outYear>
                <outModel>outModel</outModel>
                <outHasCheckDigit></outHasCheckDigit>
                <wmiFileName>c:\tempdata\configs\validatevin\wmi.cif</wmiFileName>
                <vinInfoFileName>c:\tempdata\configs\validatevin\vininfo.cif</vinInfoFileName>
                <omitInvalidVIN>true</omitInvalidVIN>
                <scorer explanationColumn='expl'>
                        <scoringEntries>
                                <scoringEntry key='VIN_NULL' score='1' explain='true' />
                                <scoringEntry key='VIN_BAD_CRC' score='2' explain='true' />
                                <scoringEntry key='VIN_FIXED' score='3' explain='true' />
                                <scoringEntry key='VIN_BAD_FORMAT' score='4' explain='true' />
                                <scoringEntry key='VIN_CRC_FIXED' score='5' explain='true' />
                                <scoringEntry key='VIN_NO_CRC' score='6' explain='true' />
                                <scoringEntry key='VIN_WMI_NOT_FOUND' score='7' explain='true' />
                                <scoringEntry key='VIN_MANU_MULTIPLE' score='8' explain='true' />
                                <scoringEntry key='VIN_MANU_MISMATCH' score='9' explain='true' />
                                <scoringEntry key='VIN_MANU_MISSING' score='10' explain='true' />
                                <scoringEntry key='VIN_Y_INVALID' score='11' explain='true' />
                                <scoringEntry key='VIN_Y_NULL' score='12' explain='true' />
                                <scoringEntry key='VIN_PY_MISMATCH' score='13' explain='true' />
                                <scoringEntry key='VIN_PY_INVALID' score='14' explain='true' />
                                <scoringEntry key='VIN_PY_NULL' score='15' explain='true' />
                                <scoringEntry key='VIN_PY_GUESS' score='16' explain='true' />
                                <scoringEntry key='VIN_NO_YEAR' score='17' explain='true' />
                                <scoringEntry key='VIN_YEAR_AROUND' score='18' explain='true' />
                        </scoringEntries>
                </scorer>
        </properties>
</step>

iWay Software