| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- (function($) {
- $.fn.bootstrapValidator.validators.cusip = {
- /**
- * Validate a CUSIP
- * Examples:
- * - Valid: 037833100, 931142103, 14149YAR8, 126650BG6
- * - Invalid: 31430F200, 022615AC2
- *
- * @see http://en.wikipedia.org/wiki/CUSIP
- * @param {BootstrapValidator} validator The validator plugin instance
- * @param {jQuery} $field Field element
- * @param {Object} options Can consist of the following keys:
- * - message: The invalid message
- * @returns {Boolean}
- */
- validate: function(validator, $field, options) {
- var value = $field.val();
- if (value == '') {
- return true;
- }
- value = value.toUpperCase();
- if (!/^[0-9A-Z]{9}$/.test(value)) {
- return false;
- }
- var converted = $.map(value.split(''), function(item) {
- var code = item.charCodeAt(0);
- return (code >= 'A'.charCodeAt(0) && code <= 'Z'.charCodeAt(0))
- // Replace A, B, C, ..., Z with 10, 11, ..., 35
- ? (code - 'A'.charCodeAt(0) + 10)
- : item;
- }),
- length = converted.length,
- sum = 0;
- for (var i = 0; i < length - 1; i++) {
- var num = parseInt(converted[i]);
- if (i % 2 != 0) {
- num *= 2;
- }
- if (num > 9) {
- num -= 9;
- }
- sum += num;
- }
- sum = (10 - (sum % 10)) % 10;
- return sum == converted[length - 1];
- }
- };
- }(window.jQuery));
|