OnlineJudge/static/src/js/lib/formValidation/validator/vin.js
2015-08-02 12:21:12 +08:00

78 lines
2.4 KiB
JavaScript
Executable File

/**
* vin validator
*
* @link http://formvalidation.io/validators/vin/
* @author https://twitter.com/nghuuphuoc
* @copyright (c) 2013 - 2015 Nguyen Huu Phuoc
* @license http://formvalidation.io/license/
*/
(function(root, factory) {
"use strict";
// AMD module is defined
if (typeof define === "function" && define.amd) {
define("validator/vin", ["jquery", "base"], factory);
} else {
// planted over the root!
factory(root.jQuery, root.FormValidation);
}
}(this, function ($, FormValidation) {
FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, {
'en_US': {
vin: {
'default': 'Please enter a valid VIN number'
}
}
});
FormValidation.Validator.vin = {
/**
* Validate an US VIN (Vehicle Identification Number)
*
* @param {FormValidation.Base} validator The validator plugin instance
* @param {jQuery} $field Field element
* @param {Object} options Consist of key:
* - message: The invalid message
* @returns {Boolean}
*/
validate: function(validator, $field, options) {
var value = validator.getFieldValue($field, 'vin');
if (value === '') {
return true;
}
// Don't accept I, O, Q characters
if (!/^[a-hj-npr-z0-9]{8}[0-9xX][a-hj-npr-z0-9]{8}$/i.test(value)) {
return false;
}
value = value.toUpperCase();
var chars = {
A: 1, B: 2, C: 3, D: 4, E: 5, F: 6, G: 7, H: 8,
J: 1, K: 2, L: 3, M: 4, N: 5, P: 7, R: 9,
S: 2, T: 3, U: 4, V: 5, W: 6, X: 7, Y: 8, Z: 9,
'1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9, '0': 0
},
weights = [8, 7, 6, 5, 4, 3, 2, 10, 0, 9, 8, 7, 6, 5, 4, 3, 2],
sum = 0,
length = value.length;
for (var i = 0; i < length; i++) {
sum += chars[value.charAt(i) + ''] * weights[i];
}
var reminder = sum % 11;
if (reminder === 10) {
reminder = 'X';
}
return (reminder + '') === value.charAt(8);
}
};
return FormValidation.Validator.vin;
}));