I found this code, at my collage, It's not my code. // Luhn algorithm validator, by Avraham Plotnitzky. (aviplot at gmail) String.prototype.luhnCheck = function() { var luhnArr = [[0,2,4,6,8,1,3,5,7,9],[0,1,2,3,4,5,6,7,8,9]], sum = 0; this.replace(/\D+/g,"").replace(/[\d]/g, function(c, p, o){ sum += luhnArr[ (o.length-p)&1 ][ parseInt(c,10) ]; }); return (sum%10 === 0) && (sum > 0); }; // Luhn algorithm producer, by Avraham Plotnitzky. (aviplot at gmail) String.prototype.luhnGet = function() { var luhnArr = [[0,1,2,3,4,5,6,7,8,9],[0,2,4,6,8,1,3,5,7,9]], sum = 0; this.replace(/\D+/g,"").replace(/[\d]/g, function(c, p, o){ sum += luhnArr[ (o.length-p)&1 ][ parseInt(c,10) ] }); return this + ((10 - sum%10)%10); }; ********************************************************************** And improved version, for fast reaction, in case this is matter. ********************************************************************** // Luhn algorithm validator, by Avraham Plotnitzky. (aviplot at gmail) function luhnCheckFast1(Luhn) { var ca, sum = 0, mul = 1; var len = Luhn.length; while (len--) { ca = parseInt(Luhn.charAt(len),10) * mul; sum += ca - (ca>9)*9;// sum += ca - (-(ca>9))|9 // 1 <--> 2 toggle. mul ^= 3; // (mul = 3 - mul); }; return (sum%10 === 0) && (sum > 0); }; // Luhn algorithm validator, by Avraham Plotnitzky. (aviplot at gmail) function luhnCheckFast2(Luhn) { var ca, sum = 0, mul = 0; var len = this.length; while (len--) { ca = parseInt(this.charAt(len),10) << mul; sum += ca - (ca>9)*9; // sum += ca - (-(ca>9))|9 // 1 <--> 0 toggle. mul ^= 1; // mul = 1 - mul; }; return (sum%10 === 0) && (sum > 0); }; |