最新消息:

php 对身份证进行验证

PHP phpbianchengdiandi 96浏览 0评论

(一)身份证号码的结构

要进行身份证号码的验证,首先要了解身份证号码的编码规则。我国身份证号码多由若干位数字或者数字与字母混合组成。

早期身份证由15位数字构成,这主要是在1980年以前发放的身份证,后来考虑到千年虫问题,因为15位的身份证号码只能为1900年1月1日到1999年12月31日出生的人编号,所以又增加了18位身份证号码编号规则。

18位身份证号码各位的含义:

1-2位省、自治区、直辖市代码;

3-4位地级市、盟、自治州代码;

5-6位县、县级市、区代码;

7-14位出生年月日,比如19820426代表1982年4月26日;

15-17位为顺序号,其中17位(倒数第二位)男为单数,女为双数;

18位为校验码,0-9和X。

作为尾号的校验码,是由把前十七位数字带入统一的公式计算出来的,

计算的结果是0-10,如果某人的尾号是0-9,都不会出现X,

但如果尾号是10,那么就得用X来代替。 X是罗马数字的10,用X来代替10。

15位号码和18位号码的区别,多2位年份和1位识别码,把出生年月的前2位数去掉,剩下就是15位身份证号码;

(二)根据17位数字本体码获取最后一位校验码程序实例(只能验证18位身份证)

class Id18

{

public $aWeight = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]; //十七位数字本体码权重

public $aValidate = [‘1′,’0′,’X’,’9′,’8′,’7′,’6′,’5′,’4′,’3′,’2′]; //mod11,对应校验码字符值

public function getValidateCode($id17)

{

$sum = 0;

$len = strlen($id17);

for ($i=0; $i<$len; $i++)

{

$sum += $id17[$i] * $this->aWeight[$i];

}

$mode = $sum % 11;

return $this->aValidate[$mode];

}

}

$test = new Id18();

echo ‘该身份证验证码:’ . $test->getValidateCode(“34xxx4178811161013”);

(三)该方法也可以验证身份证(对15位的身份证只能验证日期)

function isChinaIDCard($id)

{

$len = strlen($id);

if ($len == 18)

{

// 验证出生日期

if (! isChinaIDCardDate(substr($id,6,4), substr($id,10,2), substr($id,12,2)))

{

return false;

}

$aWeight = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]; //十七位数字本体码权重

$aValidate = [‘1′,’0′,’X’,’9′,’8′,’7′,’6′,’5′,’4′,’3′,’2′]; //mod11,对应校验码字符值

$sum = 0;

for ($i=0; $i<$len-1; $i++)

{

$sum += $id[$i] * $aWeight[$i];

}

$mode = $sum % 11;

if (isset($aValidate[$mode]))

{

if (strtoupper($aValidate[$mode]) == substr($id,17,1))

{

return true;

}

}

return false;

}

else if ($len == 15)

{

// 验证出生日期

if (! isChinaIDCardDate(’19’.substr($id,6,2), StrNo.substr($id,8,2), StrNo.substr($id,10,2)))

{

return false;

}

if (! is_numeric($id))

{

return false;

}

}

return false;

}

function isChinaIDCardDate($iY, $iM, $iD)

{

$rPattern = ‘/^(([0-9]{2})|(19[0-9]{2})|(20[0-9]{2}))-((0[1-9]{1})|(1[012]{1}))-((0[1-9]{1})|(1[0-9]{1})|(2[0-9]{1})|3[01]{1})$/’;

$sDate = $iY . ‘-‘ . $iM . ‘-‘ . $iD;

if (preg_match($rPattern,$sDate))

{

return true;

}

return false;

}

参考链接:http://www.cnblogs.com/xudong-bupt/p/3293838.html

转载请注明:PHP学习 » php 对身份证进行验证

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址