You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

验证13位南非身份证:字符长度校验代码问题排查

问题排查:13位ID校验代码失效的原因与修复方案

咱们先揪出代码里的核心问题——你的校验逻辑存在逻辑矛盾,这直接导致校验完全不起作用!

原代码的致命错误

你写的判断条件:

if ((ID.length() < 12) && (ID.length() > 12)) { ... }

这里用了&&(逻辑与),要求两个条件同时成立。但想想看:一个字符串的长度怎么可能同时小于12又大于12?这个条件永远是false,所以错误提示永远不会触发,校验等于形同虚设。

修复方案

我们需要把条件改成“长度不等于13”,有两种等价写法:ID.length() != 13 或者 ID.length() < 13 || ID.length() > 13。同时还要注意ID的类型处理(如果需要保留前导零,推荐用字符串处理):

方案1:用字符串处理(推荐,保留前导零)

如果你的ID可能包含前导零(比如0001234567890),用字符串读取能完整保留格式:

// 先读取字符串形式的ID
String ID = ReceiveNumbers.next();
if (ID.length() != 13) {
    System.out.println("Please enter a valid 13 character ID");
    // 循环读取直到输入正确
    do {
        ID = ReceiveNumbers.next();
    } while (ID.length() != 13);
    // 如需转成long类型再处理
    long myId = Long.parseLong(ID);
}

方案2:用long类型处理(注意丢失前导零)

如果ID没有前导零,坚持用long类型的话,需要把long转成字符串判断长度:

long myId = ReceiveNumbers.nextLong();
String IDStr = String.valueOf(myId);
if (IDStr.length() != 13) {
    System.out.println("Please enter a valid 13 character ID");
    // 循环读取直到输入正确
    do {
        myId = ReceiveNumbers.nextLong();
        IDStr = String.valueOf(myId);
    } while (IDStr.length() != 13);
}

额外提醒

  • 如果你用nextLong()读取,要注意用户输入非数字时会抛出InputMismatchException,可以加异常处理增强健壮性。
  • 13位数字在long的取值范围内(long最大支持19位数字),所以转类型不会有溢出问题。

内容的提问来源于stack exchange,提问作者Mode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:14:24