mirror of
https://github.com/QingdaoU/OnlineJudge.git
synced 2025-11-04 14:49:58 +08:00
180 lines
6.6 KiB
JavaScript
Executable File
180 lines
6.6 KiB
JavaScript
Executable File
/**
|
|
* cvv validator
|
|
*
|
|
* @link http://formvalidation.io/validators/cvv/
|
|
* @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/cvv", ["jquery", "base"], factory);
|
|
} else {
|
|
// planted over the root!
|
|
factory(root.jQuery, root.FormValidation);
|
|
}
|
|
|
|
}(this, function ($, FormValidation) {
|
|
FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, {
|
|
'en_US': {
|
|
cvv: {
|
|
'default': 'Please enter a valid CVV number'
|
|
}
|
|
}
|
|
});
|
|
|
|
FormValidation.Validator.cvv = {
|
|
html5Attributes: {
|
|
message: 'message',
|
|
ccfield: 'creditCardField'
|
|
},
|
|
|
|
/**
|
|
* Bind the validator on the live change of the credit card field
|
|
*
|
|
* @param {FormValidation.Base} validator The validator plugin instance
|
|
* @param {jQuery} $field Field element
|
|
* @param {Object} options Consists of the following key:
|
|
* - creditCardField: The credit card number field
|
|
*/
|
|
init: function(validator, $field, options) {
|
|
if (options.creditCardField) {
|
|
var creditCardField = validator.getFieldElements(options.creditCardField);
|
|
validator.onLiveChange(creditCardField, 'live_cvv', function() {
|
|
var status = validator.getStatus($field, 'cvv');
|
|
if (status !== validator.STATUS_NOT_VALIDATED) {
|
|
validator.revalidateField($field);
|
|
}
|
|
});
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Unbind the validator on the live change of the credit card field
|
|
*
|
|
* @param {FormValidation.Base} validator The validator plugin instance
|
|
* @param {jQuery} $field Field element
|
|
* @param {Object} options Consists of the following key:
|
|
* - creditCardField: The credit card number field
|
|
*/
|
|
destroy: function(validator, $field, options) {
|
|
if (options.creditCardField) {
|
|
var creditCardField = validator.getFieldElements(options.creditCardField);
|
|
validator.offLiveChange(creditCardField, 'live_cvv');
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Return true if the input value is a valid CVV number.
|
|
*
|
|
* @param {FormValidation.Base} validator The validator plugin instance
|
|
* @param {jQuery} $field Field element
|
|
* @param {Object} options Can consist of the following keys:
|
|
* - creditCardField: The credit card number field. It can be null
|
|
* - message: The invalid message
|
|
* @returns {Boolean}
|
|
*/
|
|
validate: function(validator, $field, options) {
|
|
var value = validator.getFieldValue($field, 'cvv');
|
|
if (value === '') {
|
|
return true;
|
|
}
|
|
|
|
if (!/^[0-9]{3,4}$/.test(value)) {
|
|
return false;
|
|
}
|
|
|
|
if (!options.creditCardField) {
|
|
return true;
|
|
}
|
|
|
|
// Get the credit card number
|
|
var creditCard = validator.getFieldElements(options.creditCardField).val();
|
|
if (creditCard === '') {
|
|
return true;
|
|
}
|
|
|
|
creditCard = creditCard.replace(/\D/g, '');
|
|
|
|
// Supported credit card types
|
|
var cards = {
|
|
AMERICAN_EXPRESS: {
|
|
length: [15],
|
|
prefix: ['34', '37']
|
|
},
|
|
DINERS_CLUB: {
|
|
length: [14],
|
|
prefix: ['300', '301', '302', '303', '304', '305', '36']
|
|
},
|
|
DINERS_CLUB_US: {
|
|
length: [16],
|
|
prefix: ['54', '55']
|
|
},
|
|
DISCOVER: {
|
|
length: [16],
|
|
prefix: ['6011', '622126', '622127', '622128', '622129', '62213',
|
|
'62214', '62215', '62216', '62217', '62218', '62219',
|
|
'6222', '6223', '6224', '6225', '6226', '6227', '6228',
|
|
'62290', '62291', '622920', '622921', '622922', '622923',
|
|
'622924', '622925', '644', '645', '646', '647', '648',
|
|
'649', '65']
|
|
},
|
|
JCB: {
|
|
length: [16],
|
|
prefix: ['3528', '3529', '353', '354', '355', '356', '357', '358']
|
|
},
|
|
LASER: {
|
|
length: [16, 17, 18, 19],
|
|
prefix: ['6304', '6706', '6771', '6709']
|
|
},
|
|
MAESTRO: {
|
|
length: [12, 13, 14, 15, 16, 17, 18, 19],
|
|
prefix: ['5018', '5020', '5038', '6304', '6759', '6761', '6762', '6763', '6764', '6765', '6766']
|
|
},
|
|
MASTERCARD: {
|
|
length: [16],
|
|
prefix: ['51', '52', '53', '54', '55']
|
|
},
|
|
SOLO: {
|
|
length: [16, 18, 19],
|
|
prefix: ['6334', '6767']
|
|
},
|
|
UNIONPAY: {
|
|
length: [16, 17, 18, 19],
|
|
prefix: ['622126', '622127', '622128', '622129', '62213', '62214',
|
|
'62215', '62216', '62217', '62218', '62219', '6222', '6223',
|
|
'6224', '6225', '6226', '6227', '6228', '62290', '62291',
|
|
'622920', '622921', '622922', '622923', '622924', '622925']
|
|
},
|
|
VISA: {
|
|
length: [16],
|
|
prefix: ['4']
|
|
}
|
|
};
|
|
var type, i, creditCardType = null;
|
|
for (type in cards) {
|
|
for (i in cards[type].prefix) {
|
|
if (creditCard.substr(0, cards[type].prefix[i].length) === cards[type].prefix[i] // Check the prefix
|
|
&& $.inArray(creditCard.length, cards[type].length) !== -1) // and length
|
|
{
|
|
creditCardType = type;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
return (creditCardType === null)
|
|
? false
|
|
: (('AMERICAN_EXPRESS' === creditCardType) ? (value.length === 4) : (value.length === 3));
|
|
}
|
|
};
|
|
|
|
|
|
return FormValidation.Validator.cvv;
|
|
}));
|