tp5身份证号验证
身份證驗證最簡單的就是判斷長度了,當然這種非常簡單破了如果要更規則一點我們需要對身份證號碼進行一些按生成規則驗證了,下面整理了一些方法我們來看看。
方法放到全局作用域application/common.php文件
1.在 application 下的 common.php 中添加如下方法:
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;}}}}總結
- 上一篇: 【MySQL】基于Docker的Mysq
- 下一篇: 和利时dcs系统服务器设置,和利时DCS