我正在开发一个应用程序,其中用户必须拨打电话并用手机的键盘输入验证码。
我希望能够检测到他们键入的数字是否正确。电话系统无法访问有效号码列表,但会根据算法(例如信用卡号)验证号码。
以下是一些要求:
鉴于这些要求,您将如何生成这样的数字?
编辑:
@Haaked:该代码必须为数字,因为用户使用其手机进行了键入。
@matt b:第一步,代码显示在网页上,第二步是调用并键入代码。我不知道用户的电话号码。
后续:我发现了几种算法来 检查 数字的有效性(请参阅此有趣的Google Code项目:checkDigits)。
经过研究,我认为我将采用 ISO 7064 Mod 97,10 公式。由于它用于验证IBAN(国际银行帐号),因此看起来非常可靠。
公式很简单:
123456
mod(98 - mod(number * 100, 97), 97)
mod(code, 97) == 1
测试:
mod(12345676, 97) = 1
mod(21345676, 97) = 50
mod(12345678, 97) = 10
显然,该算法捕获了大多数错误。
另一个有趣的选择是Verhoeff算法。它只有一个验证码,并且难以实现(与上面的简单公式相比)。