laravel框架中实现验证身份证号的正确性函数示例代码
1.服务提供者中注册自定义身份证号验证服务
Providers\AppServiceProvider.php
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\DB;
class AppServiceProvider extends ServiceProvider
{
/**
* 注册验证身份证服务
* @param $idCard
* @return bool
*/
public static function checkIdentityCard($idCard)
{
// 只能是18位
if (strlen($idCard) != 18) {
return false;
}
// 取出本体码
$idcard_base = substr($idCard, 0, 17);
// 取出校验码
$verify_code = substr($idCard, 17, 1);
// 加权因子
$factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
// 校验码对应值
$verify_code_list = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
// 根据前17位计算校验码
$total = 0;
for ($i = 0; $i < 17; $i++) {
$total += substr($idcard_base, $i, 1) * $factor[$i];
}
// 取模
$mod = $total % 11;
// 比较校验码
if ($verify_code == $verify_code_list[$mod]) {
return true;
} else {
return false;
}
}
/**
* 引导执行服务.
*
* @return void
*/
public function boot()
{
//验证身份证号
\Validator::extend('identityCard', function ($attribute, $value, $parameters, $validator) {
return $this->checkIdentityCard($value);
});
\Validator::replacer('identityCard', function ($message, $attribute, $rule, $parameters) {
return $message;
//return str_replace($attribute,$rule,$message);
});
}
}
?>
2.控制器中调用
<?php
namespace App\Modules\Live\Http\Controllers;
use Illuminate\Http\Request;
class IndexController extends Controller
{
public function index(Request $request)
{
$messages = [
'idcard.required'=>'身份证号不能为空',
'idcard.identity_card'=>'身份证号不合法',
];
$rules = [
'idcard' => 'required|identityCard',
];
$this->validate($request, $rules,$messages);
}
}
?>
注意:
该验证只是单纯的验证身份证号的正确性,如果要验证身份证实名认证,还是需要一些正规的解决方案或开放接口等。
相关文章