验证身份证函数

<?
    //php验证身份证合法性
    // 计算身份证校验码,根据国家标准GB 11643-1999
    class Util{
        static 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 = strtoupper($checksum % 11);
            $verify_number = $verify_number_list[$mod];

            return $verify_number;
        }
    }

    // 将15位身份证升级到18位
    function idcard_15to18($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 . Util::idcard_verify_number($idcard);

        return $idcard;
    }

    //18位身份证校验码有效性检查
    function idcard_checksum18($idcard){
        if (strlen($idcard) != 18){ return false; }
        $aCity = array(11 => "北京",12=>"天津",13=>"河北",14=>"山西",15=>"内蒙古",
        21=>"辽宁",22=>"吉林",23=>"黑龙江",
        31=>"上海",32=>"江苏",33=>"浙江",34=>"安徽",35=>"福建",36=>"江西",37=>"山东",
        41=>"河南",42=>"湖北",43=>"湖南",44=>"广东",45=>"广西",46=>"海南",
        50=>"重庆",51=>"四川",52=>"贵州",53=>"云南",54=>"西藏",
        61=>"陕西",62=>"甘肃",63=>"青海",64=>"宁夏",65=>"新疆",
        71=>"台湾",81=>"香港",82=>"澳门",
        91=>"国外");
        //非法地区
        if (!array_key_exists(substr($idcard,0,2),$aCity)) {
            return false;
        }
        //验证生日
        if (!checkdate(substr($idcard,10,2),substr($idcard,12,2),substr($idcard,6,4))) {
            return false;
        }
        $idcard_base = substr($idcard, 0, 17);
        if (Util::idcard_verify_number($idcard_base) != strtoupper(substr($idcard, 17, 1))){
            return false;
        }else{
            return true;
        }
    }

?>

验证身份证函数,布布扣,bubuko.com

时间: 2024-11-10 09:03:57

验证身份证函数的相关文章

SQL Server 验证身份证合法性函数(使用VBScript.RegExp)

原文:SQL Server 验证身份证合法性函数(使用VBScript.RegExp) 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/wzy0623/article/details/53895680 -- 建立正则表达式测试函数 CREATE FUNCTION dbo.RegExpTest ( @source VARCHAR(5000), --需要匹配的源字符串 @regexp VARCHAR(1000), --正则表达式 @ignorecas

C# 验证身份证是否合法的函数

主要是验证身份证的开头和身份证的格式和长度是否正确,没有按照身份证的编码规则进行严格验证 /// <summary> /// 验证身份证是否合法 /// </summary> /// <param name="idCard">要验证的身份证</param> public static bool IsIdCard(string idCard) { //如果为空,认为验证合格 if (IsNullOrEmpty(idCard)) { retu

常用JS验证和函数

下面是我常用一些JS验证和函数,有一些验证我直接写到了对象的属性里面了,可以直接通过对象.方法来调用 //浮点数除法运算 function fdiv(a, b, n) { if (n == undefined) { n = 2; } var t1 = 0, t2 = 0, r1, r2; try { t1 = a.toString().split(".")[1].length } catch (e) { } try { t2 = b.toString().split(".&q

php验证身份证号码的正确性

/********************php验证身份证号码是否正确函数*********************/function is_idcard( $id ) {   $id = strtoupper($id);   $regx = "/(^\d{15}$)|(^\d{17}([0-9]|X)$)/";   $arr_split = array();   if(!preg_match($regx, $id))   {     return FALSE;   }   if(15

分享我常用的一些JS验证和函数

下面是我常用一些JS验证和函数,有一些验证我直接写到了对象的属性里面了,可以直接通过对象.方法来调用//浮点数除法运算 function fdiv(a, b, n) { if (n == undefined) { n = 2; } var t1 = 0, t2 = 0, r1, r2; try { t1 = a.toString().split(".")[1].length } catch (e) { } try { t2 = b.toString().split(".&qu

EXCEL规范数据输入教程-验证身份证号

EXCEL日常工作中经常会输入身份证号码,一不小心就可能出错,今天大飞老师就分享这样一个示例EXCEL规范数据输入教程-验证身份证号. 我们首先要保证在EXCEL中能正确输入身份证号码(PS:身份证号18位,直接输入就会变成科学计数法形式1.235E+17),可以通过两种方式.方式一:单引号+身份证号码如:'123456789111111111,方式二:先改变单元格类型为文本格式,然后再输入身份证号码. 我们要学习一个EXCEL函数LEN,可以返回字符的个数,我们填写一个身份证号码,通过LEN可

JavaScript验证身份证号

<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

正则严格验证身份证信息

原文:正则严格验证身份证信息 $a = '130424770827005'; $reg18 = '/[1-9]\d{5}(((1[9|8])\d{2})|(20[0-1]\d))((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)/'; $reg15 = '/[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}/'; 问题是对年份进行了判断从1800到2019等4年就需要修改.其实还可以更严格些.

js验证身份证号

/* * 身份证检测(格式.地区.生日.年龄范围) * code:检测字符串 rangeAge:年龄范围[格式为:25-55] * 返回值 0:为空 ,不为0则验证不通过 */ var cityArr = { 11: "北京", 12: "天津", 13: "河北", 14: "山西", 15: "内蒙古", 21: "辽宁", 22: "吉林", 23: "