PHP验证身份证

原作者有个错的地方改了转过来


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>身份证验证</title>
</head>
<body>
<?php
/*
# CopyRight: zxing
# Document: 检查符合 GB11643-1999 标准的身份证号码的正确性
# File:gb11643_1999.func.php Fri Mar 28 09:42:41 CST 2008 zxing
# Updated:Fri Mar 28 09:42:41 CST 2008
# Note: 调用函数 check_id();
*/
$id =array();
$id[] = '370882198601064774';
$id[] = '420502198611281126';
$id[] = '370882198601064770';
$id[] = '370882860106477';
$id[] = '63212519850703214x';
$id[] = '429021198203221006';
$id[] = '429036198203211023';
foreach ($id as $key => $value){
echo check_id($value)?$value.' 是真的!<br/>': $value.' 是假的!<br/>';
}

/*
# 函数功能:计算身份证号码中的检校码
# 函数名称:idcard_verify_number
# 参数表 :string $idcard_base 身份证号码的前十七位
# 返回值 :string 检校码
# 更新时间:Fri Mar 28 09:50:19 CST 2008
*/
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); //debug 加权因子
    $verify_number_list = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'); //debug 校验码对应值
    $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位
# 函数名称:idcard_15to18
# 参数表 :string $idcard 十五位身份证号码
# 返回值 :string
# 更新时间:Fri Mar 28 09:49:13 CST 2008
*/
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, 15);
        }else{
            $idcard = substr($idcard, 0, 6) . '19'. substr($idcard, 6, 15);
        }
    }
    $idcard = $idcard . idcard_verify_number($idcard);
    return $idcard;
}
/*
# 函数功能:18位身份证校验码有效性检查
# 函数名称:idcard_checksum18
# 参数表 :string $idcard 十八位身份证号码
# 返回值 :bool
# 更新时间:Fri Mar 28 09:48:36 CST 2008
*/
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;
    }
}
/*
# 函数功能:身份证号码检查接口函数
# 函数名称:check_id
# 参数表 :string $idcard 身份证号码
# 返回值 :bool 是否正确
# 更新时间:Fri Mar 28 09:47:43 CST 2008
*/
function check_id($idcard) {
if(strlen($idcard) == 15 || strlen($idcard) == 18){
   if(strlen($idcard) == 15){
    $idcard = idcard_15to18($idcard);
   }
   if(idcard_checksum18($idcard)){
    return true;
   }else{
    return false;
   }
}else{
   return false;
}
}
?> 
</body>
</html>

 


转自:http://my.oschina.net/zhangzhihao/blog/73313

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
简介:class IdcardAction extends Action{   function get_xingzuo($cid) {      if (!$this->isIdCard($cid)) return ';     $bir = substr($cid,10,4);     $month = (int)substr($bir,0,2);     $day = (int)substr($bir,2);     $strValue = ';     if (($month == 1 && $day >= 20) || ($month == 2 && $day <= 18)) {       $strValue = "水瓶座";     } else if (($month == 2 && $day >= 19) || ($month == 3 && $day <= 20)) {       $strValue = "双鱼座";     } else if (($month == 3 && $day > 20) || ($month == 4 && $day <= 19)) {       $strValue = "白羊座";     } else if (($month == 4 && $day >= 20) || ($month == 5 && $day <= 20)) {       $strValue = "金牛座";     } else if (($month == 5 && $day >= 21) || ($month == 6 && $day <= 21)) {       $strValue = "双子座";     } else if (($month == 6 && $day > 21) || ($month == 7 && $day <= 22)) {       $strValue = "巨蟹座";     } else if (($month == 7 && $day > 22) || ($month == 8 && $day <= 22)) {       $strValue = "狮子座";     } else if (($month == 8 && $day >= 23) || ($month == 9 && $day <= 22)) {       $strValue = "处女座";     } else if (($month == 9 && $day >= 23) || ($month == 10 && $day <= 23)) {       $strValue = "天秤座";     } else if (($month == 10 && $day > 23) || ($month == 11 && $day <= 22)) {       $strValue = "天蝎座";     } else if (($month == 11 && $day > 22) || ($month == 12 && $day <= 21)) {       $strValue = "射手座";     } else if (($month == 12 && $day > 21) || ($month == 1 && $day <= 19)) {       $strValue = "魔羯座";     }     return $strValue;   } PHP根据身份证号,自动获取对应的星座函数,然后自动返回对应的星座,自动返回性别,判断是否成年
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值