代碼如下復制代碼
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;
}
}
}
}