gpt4 book ai didi

javascript - Luhn 检查 Javascript

转载 作者:行者123 更新时间:2023-11-28 13:55:04 25 4
gpt4 key购买 nike

我试图让某人输入信用卡号并通过 Luhn Check 验证它是否有效。我希望能够检查他们是否将整个卡号作为一个大字符串输入,或者是否在其中放置了空格。在我的函数验证中,尽管我不断收到一条错误消息,指出我的 total 变量存在非法返回语句。这是我当前的代码。

    <script type="text/javascript">
function validate(numbers) {
var sum;
var sum1;
var total;
for (i = 0; i < numbers.length; i++) {
if (numbers.length % 2 == 0) {
sum += numbers[i];
}
else
if ((numbers[i] * 2) >= 10) {
sum1 += numbers[i] - 9;
}
else
sum1 += numbers[i];
}
total = sum + sum1;
return total;
}

function cardnumber() {
var cardnumber = document.getElementById("input").value;
var numbers = cardnumber.split(" ");
var out = "";


for (i = 0; i < numbers.length; i++) {
out += validate(numbers[i]);

if (out % 10 == 0)
return true;
}
}

function getOutput() {
if (cardnumber()) {
alert("You card is valid.");
}
}
</script>

<body>
<h1>I will validate a credit card number</h1>
Card Type:
<input type="radio" id="c1" value="Visa">Visa</input>
Card number: <textarea id="input" style="vertical-align: middle;"></textarea></br>
<input type="button" value="Submit" onclick="getOutput()" /></br></br>
</body>

最佳答案

您的函数 validate 在 for 循环后缺少左大括号。这使得您的 return 语句在您的函数之外,并且由于 return 语句在函数之外无效,因此它是无效的 return 语句。

function validate(numbers){
var sum;
var sum1;
var total;
for (i=0; i<numbers.length; i++) { // this previous curly brace `{` was missing
if (numbers.length%2==0){
sum += numbers[i];
}
else
if ((numbers[i]*2)>=10){
sum1 += numbers[i] -9;
}
else
sum1 +=numbers[i];
}
total = sum + sum1;
return total;
}

进行更多更正编辑:

函数的格式有很多错误,您还需要在其他 else 语句周围包含左花括号和右花括号。我建议获得像 VS Code 这样的代码编辑器并下载类似于 Bracket pair colorizer 2 的扩展程序.它将一起突出显示成对的括号。这将帮助您设置格式。

function validate(numbers){
var sum;
var sum1;
var total;
for (i=0; i<numbers.length; i++) {
if (numbers.length%2==0){
sum += numbers[i];
}
else {
if ((numbers[i] * 2) >= 10) {
sum1 += numbers[i] - 9;
}
else {
sum1 += numbers[i];
}
}
}
total = sum + sum1;
return total;
}

function cardnumber(){
var cardnumber= document.getElementById("input").value;
var numbers = cardnumber.split(" ");
var out ="";


for (i = 0; i < numbers.length; i++) {
out += validate(numbers[i]);
}
if (out %10==0)
return true;
}
function getOutput() {
if (cardnumber()) {
alert("You card is valid.");
}
}

这些是所有更改的行(左边是新代码,右边是旧代码):

enter image description here

完成提示

验证函数

因此,目前如果您使用 console.log,您的 numbers 在传递给验证函数时是字符串。当它们被发送到验证时这很好,但是当您在索引 i 处添加 numbers(即 numbers[i])时,您应该使用parseInt(numbers[i], 10) 将它们变成数字,例如 sum += parseInt(numbers[i], 10); 添加时同样适用到 sum1。另一件需要注意的事情是说 var sum 将使 sum 等于 undefined 值。当您将数字或字符串添加到未定义的值时,可能会发生一些意想不到的事情,因此由于您需要总和和总计为数字,因此您应该将总和和总计初始化为 0。像这样:

var sum = 0;
var sum1 = 0;
var total = 0;

validate 函数的唯一错误是您正在检查 numbers.length%2==0 而不是您应该检查 i%2==0。您可能需要考虑一下为什么,但您可能会注意到的一件事是 numbers 的长度在循环迭代期间永远不会改变,而 i 会在每一步。

卡号函数

您的 out 变量需要初始化为零。您的卡号可以用空格分隔,然后用空字符串连接。如果用户不小心键入多个空格,这会处理。然后,由于您加入了拆分数组,因此您不再需要 for 循环。

var numbers = cardnumber.split(" ").join('');
var out =0;

out += validate(numbers);

需要以某种方式改变的行

这是旧代码行的不同之处,其中不正确并且需要以某种方式进行更改。我不会给你完整的代码,但希望这足以帮助你自己解决剩下的问题(我觉得由于某种程度的学术诚信,我不应该给你所有的解决方案。我会觉得如果我至少不让你自己思考并自己输入,我就剥夺了你学习更多的机会。)如果您想知道在以红色突出显示的特定行上需要更改什么,所有这些都应该在上方,祝您好运。

enter image description here

关于javascript - Luhn 检查 Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58760847/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com