這篇文章主要為大家分享了兩段php驗(yàn)證身份證號(hào)碼是否正確的函數(shù),感興趣的小伙伴們可以參考一下
身份證驗(yàn)證最簡(jiǎn)單的就是判斷長(zhǎng)度了,當(dāng)然這種非常簡(jiǎn)單破了如果要更規(guī)則一點(diǎn)我們需要對(duì)身份證號(hào)碼進(jìn)行一些按生成規(guī)則驗(yàn)證了,下面整理了一些函數(shù)我們來(lái)看看。
例子,今天分享一個(gè)php驗(yàn)證身份證號(hào)碼是否正確函數(shù).
/********************php驗(yàn)證身份證號(hào)碼是否正確函數(shù)*********************/ function is_idcard( $id ) { $id = strtoupper($id); $regx = "/(^\d{15}$)|(^\d{17}([0-9]|X)$)/"; $arr_split = array(); if(!preg_match($regx, $id)) { return FALSE; } 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)) { return FALSE; } else { return TRUE; } } 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)) //檢查生日日期是否正確 { return FALSE; } else { //檢驗(yàn)18位身份證的校驗(yàn)碼是否正確。 //校驗(yàn)位按照ISO 7064:1983.MOD 11-2的規(guī)定生成,X可以認(rèn)為是數(shù)字10。 $arr_int = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2); $arr_ch = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'); $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)) { return FALSE; } //phpfensi.com else { return TRUE; } } } }
調(diào)用身份證驗(yàn)證函數(shù)
$idc=is_idcard("身份證號(hào)碼");
if($idc){echo "正確";}else{echo "錯(cuò)誤";}
例子二:
function validation_filter_id_card($id_card){ if(strlen($id_card)==18){ return idcard_checksum18($id_card); }elseif((strlen($id_card)==15)){ $id_card=idcard_15to18($id_card); return idcard_checksum18($id_card); }else{ return false; } } // 計(jì)算身份證校驗(yàn)碼,根據(jù)國(guó)家標(biāo)準(zhǔn)GB 11643-1999 function idcard_verify_number($idcard_base){ if(strlen($idcard_base)!=17){ return false; } //加權(quán)因子 $factor=array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2); //校驗(yàn)碼對(duì)應(yīng)值 $verify_number_list=array('1','0','X','9','8','7','6','5','4','3','2'); $checksum=0; for($i=0;$i<strlen($idcard_base);$i++){ $checksum += substr($idcard_base,$i,1) * $factor[$i]; } $mod=$checksum % 11; $verify_number=$verify_number_list[$mod]; return $verify_number; } // 將15位身份證升級(jí)到18位 function idcard_15to18($idcard){ if(strlen($idcard)!=15){ return false; }else{ // 如果身份證順序碼是996 997 998 999,這些是為百歲以上老人的特殊編碼 if(array_search(substr($idcard,12,3),array('996','997','998','999')) !== false){ $idcard=substr($idcard,0,6).'18'.substr($idcard,6,9); }else{ $idcard=substr($idcard,0,6).'19'.substr($idcard,6,9); } } $idcard=$idcard.idcard_verify_number($idcard); return $idcard; } // 18位身份證校驗(yàn)碼有效性檢查 function idcard_checksum18($idcard){ if(strlen($idcard)!=18){ return false; } $idcard_base=substr($idcard,0,17); if(idcard_verify_number($idcard_base)!=strtoupper(substr($idcard,17,1))){ return false; }else{ return true; } }
調(diào)用方法如:validation_filter_id_card('身份證號(hào)碼');
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。
相關(guān)文章:

Hot AI Tools

Undress AI Tool
Undress images for free

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)
