日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

tp5身份证号验证

發布時間:2023/12/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 tp5身份证号验证 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

身份證驗證最簡單的就是判斷長度了,當然這種非常簡單破了如果要更規則一點我們需要對身份證號碼進行一些按生成規則驗證了,下面整理了一些方法我們來看看。
方法放到全局作用域application/common.php文件

1.在 application 下的 common.php 中添加如下方法:

/**** 身份證真實性驗證規則*/ 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;} }// 計算身份證校驗碼,根據國家標準GB 11643-1999 function idcard_verify_number($idcard_base) {if (strlen($idcard_base) != 17) {return false;}//加權因子$factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);//校驗碼對應值$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位身份證升級到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位身份證校驗碼有效性檢查 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;} }

2…控制器才可以正常調用驗證方法了。

protected $msg = ['idnumber' => '身份證格式錯誤',];protected $validate = ['idnumber' => ['/(^\d(15)$)|((^\d{18}$))|(^\d{17}(\d|X|x)$)/', 'require'],];public function add(Request $request){//驗證數據合法性$validate = new Validate($this->validate, $this->msg);if (!$validate->check($data)) {echo $validate->getError();die;}//驗證身份證真實性if (!validation_filter_id_card($data['idnumber'])) {echo '身份證不合法~';die;}}

原生php驗證也可以用下面這個函數:

/*** 身份證校驗* @param unknown $id* @return boolean*/ function isIdcard($id){$id = strtoupper($id);$regx = "/(^\d{15}$)|(^\d{17}([0-9]|X)$)/";$arr_split = [];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{//檢驗18位身份證的校驗碼是否正確。//校驗位按照ISO 7064:1983.MOD 11-2的規定生成,X可以認為是數字10。$arr_int = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];$arr_ch = ['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;}else{return true;}}}}

總結

以上是生活随笔為你收集整理的tp5身份证号验证的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。