xxxxxxxxxx
function luhnAlgorithm(value) {
let v = value.replace(/\s+/g, '').replace(/[^0-9]/gi, '')
let matches = v.match(/\d{4,16}/g);
let match = matches && matches[0] || ''
let parts = []
for (let i = 0, len = match.length; i < len; i += 1) {
parts.push(match.substring(i, i + 1))
}
let sum = 0;
for (let i = 0; i < parts.length; i++) {
let intVal = parseInt(parts[i]);
if (i % 2 === 0) {
intVal *= 2;
if (intVal > 9) {
intVal = 1 + (intVal % 10);
}
}
sum += intVal;
}
return (sum % 10) === 0;
}
xxxxxxxxxx
function cardExpireFormat(value) {
let v = value.replace(/\s+/g, '').replace(/[^0-9]/gi, '')
let matches = v.match(/\d{2,4}/g);
let match = matches && matches[0] || ''
let parts = []
for (let i = 0, len = match.length; i < len; i += 2) {
parts.push(match.substring(i, i + 2))
}
return parts.length ? parts.join('/') : value;
}
xxxxxxxxxx
function validateExpiryDate(s) {
// Check 2-2 digits
if (!/\d\d\/\d\d/.test(s)) {
return "@lang('telegram.card_expire_error_1') " + s;
}
// Check month is 1 to 12 inclusive
let b = s.split('/');
if (b[0] < 1 || b[0] > 12) {
return "@lang('telegram.card_expire_error_2') " + b[0];
}
// Check is this month or later
let d = new Date()
let c = d.getFullYear() / 100 | 0 + '';
if (new Date(c + b[1], b[0], 1) < d) {
return "@lang('telegram.card_expire_error_3') " + s;
}
return true;
}
xxxxxxxxxx
// You will need various ragex for difference card validation
// eg
function cardnumber(inputtxt)
{
var cardno = /^(?:4[0-9]{12}(?:[0-9]{3})?)$/;
if(inputtxt.value.match(cardno))
{
return true;
}
else
{
alert("Not a valid Visa credit card number!");
return false;
}
}
// Or you can use card-validator npm package
// npm i card-validator
var valid = require("card-validator");
var numberValidation = valid.number("4111");
if (!numberValidation.isPotentiallyValid) {
renderInvalidCardNumber();
}
if (numberValidation.card) {
console.log(numberValidation.card.type); // 'visa'
}