关于如何使用Javascript编码Luhn信用卡验证的建议?
我在Javascript方面非常糟糕,因为我刚刚开始学习。 我正在做一张16位数信用卡的卢恩支票。 这让我快发疯了,如果有人看一下,能给我一些帮助,我会非常感激的关于如何使用Javascript编码Luhn信用卡验证的建议?,javascript,validation,luhn,Javascript,Validation,Luhn,我在Javascript方面非常糟糕,因为我刚刚开始学习。 我正在做一张16位数信用卡的卢恩支票。 这让我快发疯了,如果有人看一下,能给我一些帮助,我会非常感激的 <script> var creditNum; var valid = new Boolean(true); creditNum = prompt("Enter your credit card number: "); if((creditNum==null)||(creditNum=="")){ valid
<script>
var creditNum;
var valid = new Boolean(true);
creditNum = prompt("Enter your credit card number: ");
if((creditNum==null)||(creditNum=="")){
valid = false;
alert("Invalid Number!\nThere was no input.");
}else if(creditNum.length!=16){
valid = false;
alert("Invalid Number!\nThe number is the wrong length.");
}
//Luhn check
var c;
var digitOne;
var digitTwo;
var numSum;
for(i=0;i<16;i+2){
c = creditNum.slice(i,i+1);
if(c.length==2){
digitOne = c.slice(0,1);
digitTwo = c.slice(1,2);
numSum = numSum + (digitOne + digitTwo);
}else{
numSum = numSum + c;
}
}
if((numSum%10)!=0){
alert("Invalid Number!");
}else{
alert("Credit Card Accepted!");
}
</script>
var-creditNum;
var valid=新布尔值(真);
creditNum=提示(“输入您的信用卡号:”);
if((creditNum==null)| |(creditNum==“”){
有效=错误;
警报(“无效号码!\n没有输入。”);
}else if(creditNum.length!=16){
有效=错误;
警报(“无效号码!\n号码长度错误。”);
}
//卢恩支票
var c;
洋地黄碱;
var digitTwo;
numSum变种;
for(i=0;i代码中的直接问题是你的for
循环。i+2
不是合适的第三个术语。从上下文来看,你正在寻找i=i+2
,你可以简写为i+=2
看起来你的算法是“把16位数字变成8对,加起来,看看总和是否能被10整除”。如果是这样的话,你可以大大简化你的循环——你不需要看十位数,只需要看单位的位置
您的循环可以如下所示,并执行相同的操作:
for (i = 1; i < 16; i +=2) {
numSum += +creditNum[i];
}
这样做的目的是遍历所有数字,保持偶数索引不变,但将奇数索引加倍。如果加倍超过9,则按照维基百科中规定的算法,将两个数字的值相加
注意:我测试的号码不是我的信用卡号码,但它是一个众所周知的号码,您可以使用它通过正确编码的Luhn验证。我下面的解决方案也适用于美国运通。我不久前提交了它进行代码测试。希望它能有所帮助:)
函数validateCard(num){
var oddSum=0;
var-evenSum=0;
var numToString=num.toString().split(“”);
对于(变量i=0;i=10){
evenSum+=((numToString[i]*2)-9);
}否则{
evenSum+=numToString[i]*2;
}
}否则{
oddSum+=parseInt(numToString[i]);
}
}
返回值(oddSum+evenSum)%10==0;
}
日志(validateCard(41111111));
享受-Mitch fromOP的可能副本指的是16位数的信用卡。美国运通是15位数。显然,您需要为
循环更改。
// Luhn check
function luhnCheck(sixteenDigitString) {
var numSum = 0;
var value;
for (var i = 0; i < 16; ++i) {
if (i % 2 == 0) {
value = 2 * sixteenDigitString[i];
if (value >= 10) {
value = (Math.floor(value / 10) + value % 10);
}
} else {
value = +sixteenDigitString[i];
}
numSum += value;
}
return (numSum % 10 == 0);
}
alert(luhnCheck("4111111111111111"));
function validateCard(num){
var oddSum = 0;
var evenSum = 0;
var numToString = num.toString().split("");
for(var i = 0; i < numToString.length; i++){
if(i % 2 === 0){
if(numToString[i] * 2 >= 10){
evenSum += ((numToString[i] * 2) - 9 );
} else {
evenSum += numToString[i] * 2;
}
} else {
oddSum += parseInt(numToString[i]);
}
}
return (oddSum + evenSum) % 10 === 0;
}
console.log(validateCard(41111111111111111));