41 lines
921 B
JavaScript
41 lines
921 B
JavaScript
|
// https://jqueryvalidation.org/creditcard-method/
|
||
|
// based on https://en.wikipedia.org/wiki/Luhn_algorithm
|
||
|
$.validator.addMethod( "creditcard", function( value, element ) {
|
||
|
if ( this.optional( element ) ) {
|
||
|
return "dependency-mismatch";
|
||
|
}
|
||
|
|
||
|
// Accept only spaces, digits and dashes
|
||
|
if ( /[^0-9 \-]+/.test( value ) ) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
var nCheck = 0,
|
||
|
nDigit = 0,
|
||
|
bEven = false,
|
||
|
n, cDigit;
|
||
|
|
||
|
value = value.replace( /\D/g, "" );
|
||
|
|
||
|
// Basing min and max length on
|
||
|
// https://developer.ean.com/general_info/Valid_Credit_Card_Types
|
||
|
if ( value.length < 13 || value.length > 19 ) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
for ( n = value.length - 1; n >= 0; n-- ) {
|
||
|
cDigit = value.charAt( n );
|
||
|
nDigit = parseInt( cDigit, 10 );
|
||
|
if ( bEven ) {
|
||
|
if ( ( nDigit *= 2 ) > 9 ) {
|
||
|
nDigit -= 9;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
nCheck += nDigit;
|
||
|
bEven = !bEven;
|
||
|
}
|
||
|
|
||
|
return ( nCheck % 10 ) === 0;
|
||
|
}, "Please enter a valid credit card number." );
|