代码如下
functionis_idcard($id)
{
$id=strtoupper($id);
$regx="/(^\d{15}$)|(^\d{17}([0-9]|X)$)/";
$arr_split=array();
if(!preg_match($regx,$id))
{
returnFALSE;
}
if(15==strlen($id))//检查15位
{
$regx="/^(\d{6})+(\d{2})+(\d{2})+(\d{2})+(\d{3})$/";
@preg_match($regx,$id,$arr_split);
//检查生日日期是否正确
$dtm_birth="19".$arr_split[2] .'/'.$arr_split[3].'/'.$arr_split[4];
if(!strtotime($dtm_birth))
{
returnFALSE;
}
else
{
returnTRUE;
}
}
else//检查18位
{
$regx="/^(\d{6})+(\d{4})+(\d{2})+(\d{2})+(\d{3})([0-9]|X)$/";
@preg_match($regx,$id,$arr_split);
$dtm_birth=$arr_split[2] .'/'.$arr_split[3].'/'.$arr_split[4];
if(!strtotime($dtm_birth))//检查生日日期是否正确
{
returnFALSE;
}
else
{
//检验18位身份证的校验码是否正确。
//校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
$arr_int=array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
$arr_ch=array(Ƈ',Ɔ','X',Ə',Ǝ',ƍ',ƌ',Ƌ',Ɗ',Ɖ',ƈ');
$sign= 0;
for($i= 0;$i< 17;$i++ )
{
$b= (int)$id{$i};
$w=$arr_int[$i];
$sign+=$b*$w;
}
$n=$sign% 11;
$val_num=$arr_ch[$n];
if($val_num!=substr($id,17, 1))
{
returnFALSE;
}
else
{
returnTRUE;
}
}
}
}
http://m.bbyears.com/jiaocheng/124223.html
推荐访问:phpstorm php面试题 php数组转字符串 php教程