介绍
这篇文章将为大家详细讲解有关PHP验证身份证格式是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
互联网公司对身份证验证的需求越来越多,然而普通的小公司是无法对接公安部门的身份认证系统的。几乎都是在网上买一些大的互联网公司的一些认证服务。即使是便宜一些的认证价格也达到万了10次/万元。也就是一角钱一次了,还是挺贵哈,所以为了减少公司的开支,我们在拿到用户提交的身份证信息去认证前应该自己先检验一下身份证的格式,如果连最基本的身份证格式就不满足的话,我们完全可以直接驳回,不必走接下来的花钱认证流程了,而且也可以建立一个用户身份证表,把每次认证通过的数据存起来,以后每次都先从自己系统里的用户身份证表查询,查不到再去走认证流程,最大化节省公司开支。
这里提供一个初步验证身份证格式的PHP身份证验证类。该类只提供一个静态方法<代码> 代码>是否是可用的接口,使用起来也很简单,只需要使用<代码> IdentityCard:: isValid> 代码即可验证。可以放到自己项目中当做工具类。该方法可以同时验证15位的老身份证和18位的新身份证格式
PHP版本:<代码>祝辞=7.0.0 代码>
<强>注:>强如果PHP版本低于7.0版本只需要把类中方法的参数限制取消掉即可使用。
类IdentityCard {/* * *校验身份证号是否合法 * @param字符串$ num待校验的身份证号 * @return bool */公共静态函数isValid(字符串num美元) {//老身份证长度15位,新身份证长度18位 美元长度=strlen (num美元); 如果(长度==15美元){//如果是15位身份证//15位身份证没有字母 如果(! is_numeric (num美元)){ 返回错误; }//省市县(6位) 美元$ areaNum=substr (num 0 6);//出生年月(6位) 美元$ dateNum=substr (num 6 6); }else if($长度==18){//如果是18位身份证//基本格式校验 如果(! preg_match (& # 39;/^ \ d {17} [0-9xX]美元/& # 39;,num美元)){ 返回错误; }//省市县(6位) 美元$ areaNum=substr (num 0 6);//出生年月日(8位) 美元$ dateNum=substr (num 6 8); 其他}{//假身份证 返回错误; }//验证地区 如果(自我!::isAreaCodeValid (areaNum美元)){ 返回错误; }//验证日期 如果(自我!::isDateValid (dateNum美元)){ 返回错误; }//验证最后一位 如果(自我!::isVerifyCodeValid (num美元)){ 返回错误; } 返回true; }/* * *省市自治区校验 * @param字符串$地区省、直辖市代码 * @return bool */私有静态函数isAreaCodeValid(字符串区域美元){ 美元$ provinceCode=substr(区域,0,2);//根据GB/t2260 - 999,省市代码11到65 如果(11 & lt;=$ provinceCode,,provinceCode & lt;美元=65){ 返回true; 其他}{ 返回错误; } }/* * *验证出生日期合法性 * @param字符串$日期日期 * @return bool */私有静态函数isDateValid(字符串$日期){ 如果(strlen(日期)美元==6){//15位身份证号没有年份,这里拼上年份 $日期=& # 39;19 & # 39;美元日期; } 一美元=intval中(substr(日期、美元0,4)); 月美元=intval中(substr(美元日期、4、2)); 美元一天=intval中(substr(美元日期6 2));//日期基本格式校验 如果(!checkdate(月,一天,美元$)){ 返回错误; }//日期格式正确,但是逻辑存在问题(如:年份大于当前年) $ currYear=日期(& # 39;y # 39;); 如果($年比;currYear美元){ 返回错误; } 返回true; }/* * *验证18位身份证最后一位 * @param字符串$ num待校验的身份证号 * @return bool */私有静态函数isVerifyCodeValid(字符串num美元) { 如果(strlen (num美元)==18){ 美元因素=[7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2]; $符号=[& # 39;1 & # 39;& # 39;0 & # 39;,& # 39;x # 39;, & # 39; 9 & # 39;, & # 39; 8 & # 39;, & # 39; 7 & # 39;, & # 39; 6 & # 39;, & # 39; 5 & # 39;, & # 39; 4 & # 39;, & # 39; 3 & # 39;, & # 39; 2 & # 39;]; 校验和美元=0; ($ i=0;美元我& lt;17;$我+ +){ (校验和+=intval中美元num {$ i}) [$ i] *美元因素; } mod=校验和美元% 11; 令牌=美元符号($国防部]; $ lastChar=strtoupper ($ num {17}); 如果美元($ lastChar !=令牌){ 返回错误; } } 返回true; } }PHP验证身份证格式是什么