首页> 实战笔录 >PHP开发笔记 >ThinkPHP ThinkPHP
TP5/6验证器验证身份号(使用自定义验证规则)
作者:小萝卜 2023-07-12 【 TP5 TP6 】 浏览 603
简介TP5/6验证器验证身份号(使用自定义验证规则)
验证器代码:
protected $rule = [
'idcard|身份证' => 'require|checkIdCard',
];
protected $message = [
'idcard.require' => '身份证必须填写',
'idcard.checkIdCard' => '身份证格式有误',
];
protected $scene = [
'edit' => [
'idcard'
],
];
//验证身份证
public function checkIdCard($idcard) {
if(empty($idcard)){
return false;
}else{
$idcard = strtoupper($idcard); # 如果是小写x,转化为大写X
if(strlen($idcard) != 18 && strlen($idcard) != 15){
return false;
}
# 如果是15位身份证,则转化为18位
if(strlen($idcard) == 15){
# 如果身份证顺序码是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);
}
# 加权因子
$factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
# 校验码对应值
$code = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
$checksum = 0;
for ($i = 0; $i < strlen($idcard); $i++) {
$checksum += substr($idcard, $i, 1) * $factor[$i];
}
$idcard = $idcard . $code[$checksum % 11];
}
# 验证身份证开始
$IDCardBody = substr($idcard, 0, 17); # 身份证主体
$IDCardCode = strtoupper(substr($idcard, 17, 1)); # 身份证最后一位的验证码
# 加权因子
$factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
# 校验码对应值
$code = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
$checksum = 0;
for ($i = 0; $i < strlen($IDCardBody); $i++) {
$checksum += substr($IDCardBody, $i, 1) * $factor[$i];
}
$validateIdcard = $code[$checksum % 11]; # 判断身份证是否合理
if($validateIdcard != $IDCardCode){
return false;
}else{
return true;
}
}
}
调用验证:
$post_data = input('post.');
$validate = new UserValidate();
if(!$validate->scene('edit')->check($post_data)){
$this->error($validate->getError());
}
返回结果:
{"code":0,"msg":"身份证格式有误","time":"1689091502","data":null}
很赞哦! (0)
相关文章
- TP6 TP5一键生成sitemap站点地图 代码分享
- TP5 接口设计中异常处理
- TP5 添加平铺文字水印,并设置文字之间的间距和文字的角度
- TP6上传图片验证时报错think\\Validate::check() must be of the type array
- TinkPHP6-tp6实现全站静态化方法
- Tp6 $request->isAjax()不能验证axios提交的请求
- TP6使用JWT实现中间件验证Token,验证用户登录信息
- thinkphp utf8中文排序,根据汉字拼音首字母排序
- tp5.0使用think-queue+redis实现消息队列简易教程
- TP6 databackup拓展插件,实现数据库备份下载还原代码分享