身份证方面的函数

函数

写了几个身份证方面的函数,个人感觉挺有用的,特别是在网络问卷调查时,对个人信息里的身份证进行验证很有用,但是应者寥寥,还是收在自己的blog里算了。

// 计算身份证校验码,根据国家标准GB 11643-1999
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;

}

// 将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 . idcard_verify_number($idcard);

   return $idcard;
}

// 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;
   }
}
?>

其中的$idcard_base是指身份证中的本位码,本位码是18位身份证里才有的,也就是18位身份证的前17位,最后一位称为校验码
一般在使用的时候不用直接调用idcard_verify_number(),平时的应用大多是使用后两个函数
这些函数都没有关心身份证字符串的格式问题,在调用前自行进行格式检查

时间: 2024-09-14 11:09:41

身份证方面的函数的相关文章

几个身份证方面的函数

函数 写了几个身份证方面的函数,个人感觉挺有用的,特别是在网络问卷调查时,对个人信息里的身份证进行验证很有用,但是应者寥寥,还是收在自己的blog里算了. <?php// 计算身份证校验码,根据国家标准GB 11643-1999 function idcard_verify_number($idcard_base){    if (strlen($idcard_base) != 17){ return false; }    // 加权因子    $factor = array(7, 9, 10

asp身份证验证代码函数_应用技巧

身份证验证代码函数 Function CheckCardId(e) arrVerifyCode = Split("1,0,x,9,8,7,6,5,4,3,2", ",") Wi = Split("7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2", ",") Checker = Split("1,9,8,7,6,5,4,3,2,1,1", ",") If Len(e

javascript身份证号码验证函数

<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html xmlns="http://www.111cn.net/1999/xhtml"> <head> <meta http-equiv="conte

一个18位身份证校验计算函数

函数|函数 因需要对15位旧身份证号码进行升位和校验.查询处理,又没有搜索到现成的函数,于是自己写了一个简单的过程,希望能够帮得上需要的朋友.本函数的功能单一,只能校验第18位号码是否正确或者取得第18位号码,其他功能留给大家自己扩展吧! <%' Version: 1.0.1' Author: sfply(sfply@163.com)' Last Modified: 2004/7/17 12:03' Src是身份证号码,可以是15位也可以是18位,15位时只能返回验证码方式使用' iChk参数取

ASP身份证验证代码函数

函数   Function CheckCardId(e)   arrVerifyCode = Split("1,0,x,9,8,7,6,5,4,3,2", ",")   Wi = Split("7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2", ",")   Checker = Split("1,9,8,7,6,5,4,3,2,1,1", ",")      If

ASP实现身份证验证的函数

这个如果返回的是输入的身份证,则表明正确,否则会提示出错 Function CheckCardId(e) arrVerifyCode = Split("1,0,x,9,8,7,6,5,4,3,2", ",") Wi = Split("7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2", ",") Checker = Split("1,9,8,7,6,5,4,3,2,1,1", &quo

javascript身份证号码验证函数支持带x

  //--身份证号码验证-支持新的带x身份证 function isIdCardNo(num) { var factorArr = new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1); var error; var varArray = new Array(); var intValue; var lngProduct = 0; var intCheckDigit; var intStrLen = num.length; var idNumber

js判断输入是否中文,数字,身份证等等js函数集合第1/3页_javascript技巧

* 判断指定的内容是否为空,若为空则弹出 警告框 */ function isEmpty(theValue, strMsg){ if(theValue==""){ alert(strMsg+"不能为空!"); return true; } return false; } /* 中文判断函数,允许生僻字用英文"*"代替 返回true表示是符合条件,返回false表示不符合 */ function isChinese(str){ var badCha

javascript 身份证号码验证函数(可辨真伪,支持15或18位身份证号)测试误差为0_javascript技巧

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行] 更直接的测试代码就是:alert(test("身份证号码")); 经测试,上面的JS验证太强大了,输入正确的身份证后,随便改一位都报错!非常实用,以后大家就方便了解用户输入的身份证的正确与否了.