我有以下代码用于验证 IMEI(不是 SV)
public static boolean luhnc(char[] digits) {
int sum = 0, s = 0;
for (int i = 0; i < digits.length - 1; i += 2) {
s = (digits[i+1] - '0') * 2;
sum += (s > 10 ? s - 9 : s) + (digits[i] - '0');
}
return 10 - (sum % 10) == (digits[digits.length-1] - '0');
}
除了我的三星 Galaxy Note 4 之外,几乎所有 IMEI 均已检查。
由于显而易见的原因,我不想将其发布在这里,但同时我需要有人验证它是否有效。
也许是我的实现不正确。
请帮忙。
最佳答案
在执行*2
操作后,您在Luhn算法
中错过了一点,它是
- 如果数字是
>=10
(而不是>
),因为10
变为0
而不是1
所以像这样修复(我将其提取到一个新行中以便让您清楚):
for (int i = 0; i < digits.length - 1; i += 2) {
s = (digits[i + 1] - '0') * 2;
sum += (s >= 10 ? s - 9 : s) + (digits[i] - '0');
}
此外,我建议使用 int[]
而不是 char[]
来删除各处的 - '0'
关于java - IMEI 未通过 Luhn 校验和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46131868/