ホームページ  >  記事  >  バックエンド開発  >  ID番号が正しいかどうかを確認するPHP関数

ID番号が正しいかどうかを確認するPHP関数

WBOY
WBOYオリジナル
2016-06-20 13:03:581245ブラウズ

ID 番号が正しいかどうかを確認する PHP 関数。関数コードは次のとおりです。

<p>function validation_filter_id_card($id_card){</p>	if(strlen($id_card)==18){<br />		return idcard_checksum18($id_card);<br />	}elseif((strlen($id_card)==15)){<br />		$id_card=idcard_15to18($id_card);<br />		return idcard_checksum18($id_card);<br />	}else{<br />		return false;<br />	}<br />}<br />// 计算身份证校验码,根据国家标准GB 11643-1999 <br /><p>function idcard_verify_number($idcard_base){<br /></p>	if(strlen($idcard_base)!=17){<br />		return false;<br />	}<br />	//加权因子 <br />	$factor=array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2);<br />	//校验码对应值 <br />	$verify_number_list=array('1','0','X','9','8','7','6','5','4','3','2');<br />	$checksum=0;<br />	for($i=0;$i<strlen($idcard_base);$i++){<br />		$checksum += substr($idcard_base,$i,1) * $factor[$i];<br />	}<br />	$mod=$checksum % 11;<br />	$verify_number=$verify_number_list[$mod];<br />	return $verify_number;<br />}<br />// 将15位身份证升级到18位 <br />function idcard_15to18($idcard){<br />	if(strlen($idcard)!=15){<br />		return false;<br />	}else{<br />		// 如果身份证顺序码是996 997 998 999,这些是为百岁以上老人的特殊编码 <br />		if(array_search(substr($idcard,12,3),array('996','997','998','999')) !== false){<br />			$idcard=substr($idcard,0,6).'18'.substr($idcard,6,9);<br />		}else{<br />			$idcard=substr($idcard,0,6).'19'.substr($idcard,6,9);<br />		}<br />	}<br />	$idcard=$idcard.idcard_verify_number($idcard);<br />	return $idcard;<br />}<br />// 18位身份证校验码有效性检查 <br />function idcard_checksum18($idcard){<br />	if(strlen($idcard)!=18){<br />		return false;<br />	}<br />	$idcard_base=substr($idcard,0,17);<br />	if(idcard_verify_number($idcard_base)!=strtoupper(substr($idcard,17,1))){<br />		return false;<br />	}else{<br />		return true;<br />	}<br /><p>}</p>

呼び出しメソッドは次のとおりです。

validation_filter_id_card('身份证号码');


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。