我试图理解为什么模运算不能按预期工作:
我需要验证IBAN,算法包括做模。
根据维基百科:
enter link description here
3214282912345698765432161182 mod 97 = 1
根据我的Windows计算器::
3214282912345698765432161182 mod 97 = 1
但是当我在JS中执行时,我得到65:
var result = 3214282912345698765432161182 % 97;
console.log(result);
// result is 65
为什么我在JS中得到65,而不是1?
最佳答案
查看其他解决您直接问题的答案。如果您想自己解决实际问题,请按以下方法解决。可能已经有一个库在执行此操作,但是有可能它使用如下所述的相同方法。
引用您链接到的the very wikipedia page:
让我们用一个例子来看看如何实现这种方法:
D = 3214282912345698765432161182
让我们将此数字分为四个部分:
P1 = 321428291 // first 9 digits
P2 = 2345698 // next 7 digits
P3 = 7654321 // next 7 digits
P4 = 61182 // last 5 digits
然后,根据维基百科
D % 97 == 1
,如果以下步骤将您引导至N % 97 == 1
:N = 321428291
N = 702345698
N = 297654321
N = 2461182
这是dfsq提供的类似方法的简单ES6实现:
function checkIBAN(iban) {
const parts = iban.match(/.{1,6}/g);
return parts.reduce((prev, curr) => Number(prev + curr) % 97, '');
}
console.log(checkIBAN("3214282912345698765432161182"));