laravel验证身份证号规则
时间: 2023-10-02 09:12:08 浏览: 131
laravel自动验证
3星 · 编辑精心推荐
Laravel 验证身份证号规则可以使用 `regex` 规则进行匹配。
身份证号码是由 18 位数字和一个校验位组成的。校验位的计算规则如下:
1. 将前 17 位数字分别乘以对应的系数,系数如下:
```
7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
```
2. 将结果相加,计算出总和。
3. 将总和除以 11,得到余数。
4. 根据余数得到校验位,校验位的值如下:
```
0 1 2 3 4 5 6 7 8 9 10
1 0 X 9 8 7 6 5 4 3 2
```
因此,可以使用以下验证规则来验证身份证号:
```php
'identity_card' => [
'required',
'regex:/^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[1-2]\d|3[0-1])\d{3}[X\d]$/',
function ($attribute, $value, $fail) {
$coefficients = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
$sum = 0;
for ($i = 0; $i < 17; $i++) {
$sum += $value[$i] * $coefficients[$i];
}
$remainder = $sum % 11;
$checkDigit = $remainder === 0 ? 1 : ($remainder === 1 ? 0 : (12 - $remainder));
if ($value[17] !== ($checkDigit === 10 ? 'X' : strval($checkDigit))) {
$fail('The '.$attribute.' is invalid.');
}
},
],
```
这个规则包括了正则表达式和自定义验证逻辑。正则表达式用来验证身份证号是否符合基本格式,自定义验证逻辑用来计算校验位并验证其是否正确。
阅读全文