PHP校验身份证号是否正确

这篇具有很好参考价值的文章主要介绍了PHP校验身份证号是否正确。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

用PHP语言实现校验身份证号的算法,供参考文章来源地址https://www.toymoban.com/news/detail-739322.html

    /**
     * 校验身份证号是否正确
     * @param $idcard 身份证号
     * @return bool true正确
     */
    public static function validateIDCard($idcard) {
        if(empty($idcard)){
            return false;
        }
        if (!preg_match('/(^\d{15}$)|(^\d{17}([0-9]|X|x)$)/',$idcard)){
            return false;
        }
        $idcard = strtoupper($idcard); # 如果是小写x,转化为大写X
        if(strlen($idcard) != 18 && strlen($idcard) != 15){
            return false;
        }
        # 如果是15位身份证,则转化为18位
        if(strlen($idcard) == 15){
            # 如果身份证顺序码是996 997 998 999,这些是为百岁以上老人的特殊编码
            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);
            }
            # 加权因子
            $factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
            # 校验码对应值
            $code = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
            $checksum = 0;
            for ($i = 0; $i < strlen($idcard); $i++) {
                $checksum += substr($idcard, $i, 1) * $factor[$i];
            }
            $idcard = $idcard . $code[$checksum % 11];
        }
        # 验证身份证开始
        $IDCardBody = substr($idcard, 0, 17); # 身份证主体
        $IDCardCode = strtoupper(substr($idcard, 17, 1)); # 身份证最后一位的验证码

        # 加权因子
        $factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
        # 校验码对应值
        $code = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
        $checksum = 0;
        for ($i = 0; $i < strlen($IDCardBody); $i++) {
            $checksum += substr($IDCardBody, $i, 1) * $factor[$i];
        }
        $validateIdcard = $code[$checksum % 11];    # 判断身份证是否合理
        return $validateIdcard == $IDCardCode;
    }

到了这里,关于PHP校验身份证号是否正确的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • php 使用数组校验登录用户

    目录   1. 数组的增删改查 2. 验证登录用户 2.1 前端简单代码 2.2 php代码

    2024年01月20日
    浏览(26)
  • PHP isset()函数使用详解,PHP判断变量是否存在

    「作者主页」: 士别三日wyx 「作者简介」: CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」: 对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 isset() 函数可以检测 「变量是否存在」 并非NULL。常用来判断变量是否被定义

    2024年02月08日
    浏览(37)
  • 实名制重要性、PHP身份实名认证示例、身份证ocr识别核验

    身份证丢失失,可能会被不法分子利用去贷款。虽然是被人冒名办理,客观上不承担责任,但会造成个人信用信息的困扰。因此,对于个人来讲,要妥善保管自己的身份证,避免不必要的麻烦。对于贷款机构来说,单纯的认证了身份证的真伪是不够的,还需要进行“身份认证

    2024年04月23日
    浏览(24)
  • PHP is_array()函数详解,PHP判断是否为数组

    「作者主页」: 士别三日wyx 「作者简介」: CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」: 对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 is_array() 可以 「检测」 变量是不是 「数组」 类型。 语法 参数 $var :需要检

    2024年02月11日
    浏览(42)
  • JS正则 身份证号脱敏

    【一】:说明: 身份证脱敏处理:/^(.{6})(?:d+)(.{4})$/,显示前6和后4,出生日期隐藏 【二】: 说明: 在上面的代码中,首先定义了一个身份证号变量 idCard ,然后定义了一个正则表达式 reg ,该正则表达式匹配身份证号的前6位和后4位,并使用括号将前6位和后4位分别分组。

    2024年02月05日
    浏览(34)
  • PHP项目&变量覆盖&反序列化&未授权访问&身份验证

    此种漏洞由于没有什么关键函数,所以需要通过功能点去进行测试。 CNVD官网上搜索Bosscms未授权访问漏洞。 根据描述,影响的是1.0版本。看到发送时间为21年12月29好,收录时间为22年1月18号。再去官网看版本更新的时间点,V1.0版本和V1.1版本都是21年12月29号之前推出的,都存

    2024年02月19日
    浏览(26)
  • js正则对身份证号的判断

    以下是一个简单的 JavaScript 函数,使用正则表达式来验证身份证号码的格式是否正确: 上述代码仅仅是验证了身份证号码的格式是否正确,而并没有验证身份证号码本身是否合法。如果需要验证身份证号码的合法性,可以使用第三方库或者在线服务。  要判断身份证号码是否

    2024年02月16日
    浏览(26)
  • Excel中如何用身份证号提取计算年龄?

    目录 Excel中如何用身份证号提取计算年龄? 1、在年龄D2单元格中输入公式【=DATEDIF(TEXT(MID(C2,7,8),\\\"00-00-00\\\"),TODAY(),\\\"y\\\")】  2、MID(C2,7,8)函数表示用MID函数提取C2单元格中身份证号第七位开始,提取8位数,\\\"00-00-00\\\"为提取时间的格式 3、TEXT函数为将MID函数文

    2024年02月04日
    浏览(33)
  • 【5G NR】手机身份证号IMEI与IMEISV

    目录 IMEI与IMEISV简介 IMEI格式变化 IMEI的组成 IMEISV的组成   通常我们购买手机,会有两个标签,一个标签是入网许可证,贴于手机背面,另一个标签可能贴于手机背面,也可能在外包装上,这个含有条码的标签标识的是IMEI。   手机上的“IMEI”是指国际移动设备识别码(

    2024年02月09日
    浏览(36)
  • 用于验证中国大陆身份证号的正则表达式

    这个正则表达式用于验证中国大陆的身份证号码格式是否正确。下面是对这个正则表达式的详细解析: ^  是匹配的起始字符,表示从字符串的开始位置进行匹配。 [1-9]  匹配身份证号码的第1位,表示该位必须是1到9的数字。 [0-9]{5}  匹配身份证号码的第2位到第6位,这五位可

    2024年02月10日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包