200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > PHP 实现身份证号实名认证功能

PHP 实现身份证号实名认证功能

时间:2020-09-25 02:55:59

相关推荐

PHP 实现身份证号实名认证功能

实名认证牵涉公安备案系统,需想公安机关申请接口进行验证。当然,调用其他已向公安机关申请了接口的第三方接口一样可行。否则,只能用身份证生成规则进行验证,不完全正确,身份证号和姓名也不匹配。如下:

/*/# CopyRight: zxing# Document: 检查符合 GB11643-1999 标准的身份证号码的正确性# File:gb11643_1999.func.php Fri Mar 28 09:42:41 CST zxing# Updated:Fri Mar 28 09:42:41 CST # Note: 调用函数 check_id();#/*///$id =array();$id[] = '370882198601064774';$id[] = '420502198611281126';$id[] = '370882198601064770';$id[] = '370882860106477';$id[] = '63212519850703214x';$id[] = '429021198203221006';$id[] = '429036198203211023';foreach ($id as $key => $value){echo check_id($value)?$value.' 是真的!': $value.' 是假的!';}#/*//*/# 函数功能:计算身份证号码中的检校码# 函数名称:idcard_verify_number# 参数表 :string $idcard_base 身份证号码的前十七位# 返回值 :string 检校码# 更新时间:Fri Mar 28 09:50:19 CST /*/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); //debug 加权因子$verify_number_list = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'); //debug 校验码对应值$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位# 函数名称:idcard_15to18# 参数表 :string $idcard 十五位身份证号码# 返回值 :string# 更新时间:Fri Mar 28 09:49:13 CST /*/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位身份证校验码有效性检查# 函数名称:idcard_checksum18# 参数表 :string $idcard 十八位身份证号码# 返回值 :bool# 更新时间:Fri Mar 28 09:48:36 CST /*/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;}}/*/# 函数功能:身份证号码检查接口函数# 函数名称:check_id# 参数表 :string $idcard 身份证号码# 返回值 :bool 是否正确# 更新时间:Fri Mar 28 09:47:43 CST /*/function check_id($idcard) {if(strlen($idcard) == 15 || strlen($idcard) == 18){if(strlen($idcard) == 15){$idcard = idcard_15to18($idcard);}if(idcard_checksum18($idcard)){return true;}else{return false;}}else{return false;}}

网上很多关于实名认证的参考文章,多数用的是聚合数据的认证接口:/docs/api/id/103

参考文章:/maxianshi/article/details/80127610

而我今天要介绍的是阿里云的实名认证接口调用,优势在于:简单、快捷、实惠:

接口申请地址:/products/56928004/cmapi014760.html?spm=5176.730005.0.0.aeWVBT

调用地址:http://idcard./lianzhuo/idcard

请求方式:GET

返回类型:JSON

请求参数:

请求示例:

<?php$host = "http://idcard.";$path = "/lianzhuo/idcard";$method = "GET";$appcode = "你自己的AppCode";//支付成功之后点击跳转至阿里云管控中心,可看到AppCode,如下图$headers = array();array_push($headers, "Authorization:APPCODE " . $appcode);$querys = "cardno=370703198111300338&name=%E9%83%AD%E5%BE%B7%E6%98%8C";$bodys = "";$url = $host . $path . "?" . $querys;$curl = curl_init();curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);curl_setopt($curl, CURLOPT_URL, $url);curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);curl_setopt($curl, CURLOPT_FAILONERROR, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); //此处设置返回头信息curl_setopt($curl, CURLOPT_HEADER, false); //是否显示头信息,false为不显示if (1 == strpos("$".$host, "https://")){curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);}$response = curl_exec( $curl );

var_dump(curl_exec($curl));curl_close( $curl );$result_json = json_decode($response,true);?>

返回示例:

{"resp": {"code": 0,"desc": "匹配"},"data": {"sex": "男","address": "广东省清远市清新县","birthday": "1989-05-25"}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。