php 身份证号检测
发布日期:2025-05-03 02:31:22 浏览次数:11 分类:精选文章

本文共 1938 字,大约阅读时间需要 6 分钟。

身份证号码检测与验证技术解析

在PHP编程领域,身份证号码的验证是一个常见的需求,尤其是在需要确保身份证号码有效性的场景中。今天,我们将深入探讨一个实用的身份证号码检测与验证系统,其核心逻辑基于中国的身份证号码规范。

1. 基本原理

中国的身份证号码分为两种类型:15位和18位。15位身份证号码在2012年被普及,18位身份证号码则在2013年起逐步取代。18位身份证号码的主要特点是其校验码的计算方式更加精确,且新增了对百岁老人的特殊编码支持。

2. 校验码计算方法

身份证号码的核心在于其校验码的正确性。以下是校验码计算的具体步骤:

  • 加权因子:每一位数字都有特定的加权因子
  • 计算总和:将身份证号码的每一位数字与对应的加权因子相乘,并累加得到总和
  • 取模运算:将总和对11取模,得到校验码的位置索引
  • 校验数字匹配:将计算得到的校验码与实际身份证号码中的校验码进行比对
  • 具体实现如下:

    function idcard_verify_number($idcard_base) {    if (strlen($idcard_base) != 17) {        return false;    }    $factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);    $verify_number_list = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');    $checksum = 0;    for ($i = 0; $i < strlen($idcard_base); $i++) {        $checksum += substr($idcard_base, $i, 1) * $factor[$i];    }    $mod = $checksum % 11;    $verify_number = $verify_number_list[$mod];    return $verify_number;}

    3. 15位至18位身份证号码转换

    对于15位身份证号码,需要进行转换以适配18位身份证号码格式。转换规则如下:

  • 特殊编码处理:如果身份证号码的最后三位是996、997、998或999,则视为特殊编码,表示百岁以上老人。
  • 号码拼接:将前六位号码与"18"拼接,后九位号码保持不变。
  • 默认处理:对于其他情况,将前六位号码与"19"拼接,后九位号码保持不变。
  • 具体实现如下:

    function idcard_15to18($idcard) {    if (strlen($idcard) != 15) {        return false;    }    // 特殊编码处理    if (array_search(substr($idcard, 12, 3), array('996', '997', '998', '999')) !== false) {        $idcard = substr($idcard, 0, 6) . '18' . substr($idcard, 6, 9);    } else {        $idcard = substr($idcard, 0, 6) . '19' . substr($idcard, 6, 9);    }    return $idcard;}

    4. 18位身份证号码校验

    18位身份证号码的校验需要同时验证基数部分和校验码。具体实现如下:

    function idcard_checksum18($idcard) {    if (strlen($idcard) != 18) {        return false;    }    $idcard_base = substr($idcard, 0, 17);    if (idcard_verify_number($idcard_base) != strtoupper(substr($idcard, 17, 1))) {        return false;    } else {        return true;    }}

    5. 应用场景

    这些函数可以广泛应用于以下场景:

  • 身份证号码输入验证:确保用户输入的身份证号码格式和校验码正确。
  • 批量数据验证:用于对大量身份证号码数据进行快速验证。
  • 系统接入验证:确保系统接入的身份证号码符合规范。
  • 通过以上方法,可以有效地检测和验证身份证号码的合法性,确保数据的准确性和完整性。

    上一篇:PHP 输入输出流合集
    下一篇:PHP 设置调试工具XDebug PHPStorm IDE

    发表评论

    最新留言

    能坚持,总会有不一样的收获!
    [***.219.124.196]2026年06月14日 18时28分24秒