跳到正文

问题排查

验证码开头的 0,要不要填?

六位验证码以 0 开头,不能只输入后面五位。看看前导零为什么要保留,以及代码经过数字转换后为什么会变短。

作者 Authenticator Cloud发布于 3 分钟阅读
一个标着 0 的纸片与五个圆点纸片相连,下方箭头将整组纸片连在一起
先说结论

要填。验证码开头的 0 也是其中一位,应按验证器显示的完整代码填写。六位还是八位取决于账号配置,不要把代码当成普通数值,也不要凭空猜测缺失的数字。

本文目录
  1. 开头的 0 也是一位
  2. 转成普通数值,格式就可能丢了
  3. 标准中的公开样本,也有开头为 0 的代码
  4. 填写时,取当前完整的一组
  5. 数字完整,网站却仍然提示错误?

开头的 0 也是一位

填写内容位数
0123456 位,保留完整示例
123455 位,少了开头的 0

假设验证器显示 012345。这是用来说明格式的六位示例:从左到右共有六个位置,第一位就是 0。只填 12345,便少了一个位置。

不要用平时读整数的习惯来处理验证码。账号要求的位数属于代码格式的一部分,看到开头有 0,照着保留即可。

转成普通数值,格式就可能丢了

代码经过数值转换后,开头的 0 不再保留。例如在 JavaScript 中,将文字 '012345' 传给 Number(),得到的数值是 12345;再转回文字,也不会自动知道原先有六位。

这是数值转换的结果,不代表每个网页输入框都会这样处理。若粘贴后内容变短,先对照验证器里的当前完整代码和输入框中的实际内容,不要直接认定账号绑定出了问题。

标准中的公开样本,也有开头为 0 的代码

公开样本的表示内容
完整八位结果07081804
转成数值后的表示7081804,原来的位数信息不再保留

RFC 6238 附录 B 列出了一组公开测试样本:使用文档给定的测试密钥、SHA1、30 秒步长、起点 T0 = 0,在 Unix 时间 1111111109 时,八位结果为 07081804。它的第一位 0 同样需要保留。

这里是八位测试样本,不能把它误当成日常账号的六位代码,也不能拿到真实登录页使用。RFC 4226 的参考实现同样会在结果前补 0,直到达到指定长度。

填写时,取当前完整的一组

在 Authenticator Cloud 中找到对应服务和账号,查看当时显示的完整验证码。复制或填写时一并保留开头的 0,避免先经过表格或其他中间工具做数值转换。

如果输入框已有上一组数字,先确认内容,再填入当前这一组。拿不准少了哪一位时,回到验证器重新取码,不要按猜测在前面补几个 0。浏览器里的取码方式可参阅复制与填充指南。

  • 按当前条目显示的完整位数填写,不只看最后几位。
  • 对照正确的服务和账号,不把两个同名条目的代码混用。
  • 代码变短时,检查复制后到填写前是否经过了数值转换。

数字完整,网站却仍然提示错误?

前导零只是一个格式检查点。如果完整代码仍未通过,可继续按验证码错误的检查步骤核对账号、有效时间和绑定状态,不必先删除现有记录。

参考资料

详细设置步骤可参阅以上官方帮助。

下载 APP

Apple App StoreiPhone / iPad 前往下载 Android APK官网直接下载 · 仅 ARM64 下载