• 身份证号码格式检测



    //验证身份证是否有效
    function validateIDCard($IDCard) {
    if (strlen($IDCard) == 18) {
    return check18IDCard($IDCard);
    } elseif ((strlen($IDCard) == 15)) {
    $IDCard = convertIDCard15to18($IDCard);
    return check18IDCard($IDCard);
    } else {
    return false;
    }
    }

    //计算身份证的最后一位验证码,根据国家标准GB 11643-1999
    function calcIDCardCode($IDCardBody) {
    if (strlen($IDCardBody) != 17) {
    return false;
    }

    //加权因子
    $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];
    }

    return $code[$checksum % 11];
    }

    // 将15位身份证升级到18位
    function convertIDCard15to18($IDCard) {
    if (strlen($IDCard) != 15) {
    return false;
    } else {
    // 如果身份证顺序码是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);
    }
    }
    $IDCard = $IDCard . calcIDCardCode($IDCard);
    return $IDCard;
    }

    // 18位身份证校验码有效性检查
    function check18IDCard($IDCard) {
    if (strlen($IDCard) != 18) {
    return false;
    }

    $IDCardBody = substr($IDCard, 0, 17); //身份证主体
    $IDCardCode = strtoupper(substr($IDCard, 17, 1)); //身份证最后一位的验证码

    if (calcIDCardCode($IDCardBody) != $IDCardCode) {
    return false;
    } else {
    return true;
    }
    }

    使用方法:
    if(!validateIDCard($idNumber)){
    echo '身份证号码格式不正确';
    }
     
  • 相关阅读:
    (转)Esri微博地址收录
    使用liquibasemavenplugin实现持续数据库集成
    CenOS系统中安装Tomcat7并设置为自启动服务
    Androidx86虚拟机安装配置全攻略
    jdk8根据某一属性去重方法 Collectors.collectingAndThen
    [转]恶心的C语言strtok函数
    人生七日忠告 人生征途须记
    VTK中二维Delaunay三角剖分
    Python编程题41原地反转字符串
    Python编程题42除自身以外元素的乘积
  • 原文地址:https://www.cnblogs.com/wenxinphp/p/10634735.html
Copyright © 2020-2023  润新知