| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- (function($) {
- $.fn.bootstrapValidator.i18n.creditCard = $.extend($.fn.bootstrapValidator.i18n.creditCard || {}, {
- 'default': 'Please enter a valid credit card number'
- });
- $.fn.bootstrapValidator.validators.creditCard = {
- /**
- * Return true if the input value is valid credit card number
- * Based on https://gist.github.com/DiegoSalazar/4075533
- *
- * @param {BootstrapValidator} validator The validator plugin instance
- * @param {jQuery} $field Field element
- * @param {Object} [options] Can consist of the following key:
- * - message: The invalid message
- * @returns {Boolean}
- */
- validate: function(validator, $field, options) {
- var value = $field.val();
- if (value === '') {
- return true;
- }
- // Accept only digits, dashes or spaces
- if (/[^0-9-\s]+/.test(value)) {
- return false;
- }
- value = value.replace(/\D/g, '');
- if (!$.fn.bootstrapValidator.helpers.luhn(value)) {
- return false;
- }
- // Validate the card number based on prefix (IIN ranges) and length
- 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;
- for (type in cards) {
- for (i in cards[type].prefix) {
- if (value.substr(0, cards[type].prefix[i].length) === cards[type].prefix[i] // Check the prefix
- && $.inArray(value.length, cards[type].length) !== -1) // and length
- {
- return true;
- }
- }
- }
- return false;
- }
- };
- }(window.jQuery));
|