// Verhoeff algorithm get & set, by Avraham Plotnitzky. (aviplot at gmail) var Verhoeff = { "d":[[0,1,2,3,4,5,6,7,8,9], [1,2,3,4,0,6,7,8,9,5], [2,3,4,0,1,7,8,9,5,6], [3,4,0,1,2,8,9,5,6,7], [4,0,1,2,3,9,5,6,7,8], [5,9,8,7,6,0,4,3,2,1], [6,5,9,8,7,1,0,4,3,2], [7,6,5,9,8,2,1,0,4,3], [8,7,6,5,9,3,2,1,0,4], [9,8,7,6,5,4,3,2,1,0]], "p":[[0,1,2,3,4,5,6,7,8,9], [1,5,7,6,2,8,3,0,9,4], [5,8,0,3,7,9,6,1,4,2], [8,9,1,6,0,4,3,5,2,7], [9,4,5,3,1,2,6,8,7,0], [4,2,8,6,5,7,3,9,0,1], [2,7,9,3,8,0,6,4,1,5], [7,0,4,6,9,1,3,2,5,8]], "j":[0,4,3,2,1,5,6,7,8,9], "check":function(str) { var c = 0; str.replace(/\D+/g,"").split("").reverse().join("").replace(/[\d]/g, function(u, i, o){ c = Verhoeff.d[c][Verhoeff.p[i&7][parseInt(u,10)]]; }); return (c === 0); }, "get":function(str){ var c = 0; str.replace(/\D+/g,"").split("").reverse().join("").replace(/[\d]/g, function(u, i, o){ c = Verhoeff.d[ c ][ Verhoeff.p[(i+1)&7][parseInt(u,10)] ]; }); return Verhoeff.j[c]; } }; If you want only Validator. // Verhoeff algorithm validation check, by Avraham Plotnitzky. (aviplot at gmail) String.prototype.verhoeffCheck = (function() { var d = [[0,1,2,3,4,5,6,7,8,9], [1,2,3,4,0,6,7,8,9,5], [2,3,4,0,1,7,8,9,5,6], [3,4,0,1,2,8,9,5,6,7], [4,0,1,2,3,9,5,6,7,8], [5,9,8,7,6,0,4,3,2,1], [6,5,9,8,7,1,0,4,3,2], [7,6,5,9,8,2,1,0,4,3], [8,7,6,5,9,3,2,1,0,4], [9,8,7,6,5,4,3,2,1,0]]; var p = [[0,1,2,3,4,5,6,7,8,9], [1,5,7,6,2,8,3,0,9,4], [5,8,0,3,7,9,6,1,4,2], [8,9,1,6,0,4,3,5,2,7], [9,4,5,3,1,2,6,8,7,0], [4,2,8,6,5,7,3,9,0,1], [2,7,9,3,8,0,6,4,1,5], [7,0,4,6,9,1,3,2,5,8]]; var j = [0,4,3,2,1,5,6,7,8,9]; return function() { var c = 0; this.replace(/\D+/g,"").split("").reverse().join("").replace(/[\d]/g, function(u, i, o){ c = d[c][p[i&7][parseInt(u,10)]]; }); return (c === 0); }; })(); If you want only producer. // Verhoeff algorithm producer, by Avraham Plotnitzky. (aviplot at gmail) String.prototype.verhoeffGet = (function() { var d = [[0,1,2,3,4,5,6,7,8,9], [1,2,3,4,0,6,7,8,9,5], [2,3,4,0,1,7,8,9,5,6], [3,4,0,1,2,8,9,5,6,7], [4,0,1,2,3,9,5,6,7,8], [5,9,8,7,6,0,4,3,2,1], [6,5,9,8,7,1,0,4,3,2], [7,6,5,9,8,2,1,0,4,3], [8,7,6,5,9,3,2,1,0,4], [9,8,7,6,5,4,3,2,1,0]]; var p = [[0,1,2,3,4,5,6,7,8,9], [1,5,7,6,2,8,3,0,9,4], [5,8,0,3,7,9,6,1,4,2], [8,9,1,6,0,4,3,5,2,7], [9,4,5,3,1,2,6,8,7,0], [4,2,8,6,5,7,3,9,0,1], [2,7,9,3,8,0,6,4,1,5], [7,0,4,6,9,1,3,2,5,8]]; var j = [0,4,3,2,1,5,6,7,8,9]; return function() { var c = 0; this.replace(/\D+/g,"").split("").reverse().join("").replace(/[\d]/g, function(u, i, o){ c = d[c][p[(i+1)&7][parseInt(u,10)]]; }); return j[c]; }; })(); |
JavaScript >