Javascript 对于奇数和偶数长度的数字,如何最好地确定RightHost数字左侧的数字?
我正在写一个代码来检查一定数量的信用卡号输入是否有效。我写过:Javascript 对于奇数和偶数长度的数字,如何最好地确定RightHost数字左侧的数字?,javascript,algorithm,luhn,Javascript,Algorithm,Luhn,我正在写一个代码来检查一定数量的信用卡号输入是否有效。我写过: function validCreditCard(value) { // accept only digits, dashes or spaces if (value.trim().length <= 1) return 'Value entered must be greater than 1'; if (/[^0-9\s]+/.test(value)) return false; // R
function validCreditCard(value) {
// accept only digits, dashes or spaces
if (value.trim().length <= 1) return 'Value entered must be greater than 1';
if (/[^0-9\s]+/.test(value)) return false;
// Remove all white spaces
value = value.replace(/\D/g, '');
for (var i = 0; i < value.length; i++) {
// code goes here
// Loop through the string from the rightmost moving left and double the value of every second digit.
}
函数validCreditCard(值){
//仅接受数字、破折号或空格
if(value.trim().length
从最右边向左移动循环字符串,并将
每第二个数字的值
您可以使用.reverse()
,.map()
和余数运算符%
设arr=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16];
var res=[…arr].reverse().map((a,i)=>i%2?a*2:a).reverse();
console.log(res);
要知道哪些是“从右开始的每一秒数字”,实际上不需要从头到尾迭代。也可以从左到右迭代。要知道某个数字是否是这样的“第二”位,请将其奇偶校验与输入长度的奇偶校验进行比较
所以像这样:
var parity = value.length % 2;
for (var i = 0; i < value.length; i++) {
if (i % 2 === parity) {
// "Special" treatment comes here
} else {
// "Normal" treatment comes here
}
}
var奇偶校验=value.length%2;
对于(变量i=0;i
但如果输入的长度为奇数,您也可以在输入前加上前缀零,使其长度为偶数:
if (value.length % 2) value = '0' + value;
for (var i = 0; i < value.length; i++) {
if (i % 2 === 0) {
// "Special" treatment comes here
} else {
// "Normal" treatment comes here
}
}
if(value.length%2)值='0'+值;
对于(变量i=0;i
您正在实现的称为。因此,使用长度奇偶校验时,它可能如下所示:
var parity = value.length % 2;
for (var i = 0; i < value.length; i++) {
if (i % 2 === parity) {
// "Special" treatment comes here
} else {
// "Normal" treatment comes here
}
}
函数validCreditCard(值){
//仅接受数字、破折号或空格
if(/[^0-9\s-]+/.test(value))返回false;
//只获取数字
值=值。替换(/\D/g,“”);
//至少需要一个数字
如果(!value.length)返回false;
var奇偶性=value.length%2;
var总和=0;
对于(变量i=0;i4')//双精度,如果双精度>9,则添加一个
:+值[i];//正常情况
}
返回和%10==0;
}
console.log(validCreditCard(“4024007112651582”);
“每两位数的值加倍”?如果数字大于4会发生什么?你能用你当前的代码发布一两个例子吗?一个简单的解决方案:如果输入的长度是奇数,则在输入前加上一个额外的零。现在你只有一个案例。请解释for循环中发生了什么。解释添加到我的答案中。哇!(值[i]*2)%10+(值[i]>“4”)
。在5的情况下,(5*2)%10+(值[i]>“4')=10%10+('5'>'4')=0+1(真)=1
,对于6,(6*2)%10+(值[i]>“4')=12%10+('6'>'4')=2+1(真)=3
,(值[i]>(7*2)%10+)=14%10+('7'>'4')=4')=14%10+('7'>'4')=5……
将始终导致false(0)并添加到余数中,余数将始终是数字。您使用奇偶校验(0和1)在一行中逐步完成所有操作的方式非常别致。我从未想到过这种方式,感谢分享的知识!