php + html + api 读取身份证
实现步骤:
1. 前端上传一张base64的图片
2. php接收,进行验证
3. 调用百度api进行识别
a. 登录百度智能云 点击前往
b. 点击立即使用
c. 如果没有引用那就创建一个应用
d. 填写信息 (根据你的个人信息进行选择,这里接口选择使用默认的,不需要进行修改)
f. 申请完成,去领取免费使用额度
这里我已经领取了,不能再接着领取, 你们领取身份证识别的额度就行 (注意: 根据提示这里领取后在30分钟内才有效)
g. 查看是否生效
完成步骤后就可以使用了,不多说了,上代码了
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <input type="file" id="file" onchange="imageChange(this)"><br> <img id="img" src="" alt="" style="height: 100px;"> <ul id="datas"></ul> <script src="https://cdn.staticfile.org/jquery/2.0.3/jquery.min.js"></script> <script > function imageChange(obj){ var image = obj.files[0]; //将file 转为base64 var reader = new FileReader(); reader.readAsDataURL(image); reader.onload = function(ev) { var dataURL = ev.target.result; var src = \'\'; $.post(\'cacheId.php\',{base:dataURL,type:1},function(data){ //ajax请求 $(\'#img\').attr(\'src\',dataURL) var datas = data.words_result; for(v in datas){ src += \' <li><span>\'+v+\':</span><span>\'+datas[v].words+\'</span></li>\' } $(\'#datas\').append(src) },\'json\') } } </script> </body> </html>
cacheId.php
<?php $api_key = \'你的api_key\'; $secret_key = \'你的secret_key\'; //首先先获取access_token ,因为请求身份证验证接口需要用到 ,请求access_token 有效期是30天 我这里没有保存, 如需要你们可以保存到session中 //获取access_token 返回参数请参考 https://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjhhu $access_token = getAccessToken($api_key,$secret_key); //请求身份证识别接口地址 //https://cloud.baidu.com/doc/OCR/s/rk3h7xzck 官网文档 $url = \'https://aip.baidubce.com/rest/2.0/ocr/v1/idcard?access_token=\'.$access_token; //接收到前端传过来的base64图片 官网最大能接口4M 并且后缀为jpg/jpeg/png/bmp格式, 我这里也懒得进行操作了,你们获取base进行验证一下就行 $base = $_POST[\'base\']; //发起请求 $body = [\'id_card_side\' => "front",\'image\' => $base]; //$body[\'detect_photo\'] = \'true\'; //这个是获取头像的, 有需要请解注释 //请求第三方并以json的格式返回 $res = request_post($url,$body); //返回参数参考地址: https://cloud.baidu.com/doc/OCR/s/rk3h7xzck //错误码请自行判断 //参考地址 https://cloud.baidu.com/doc/OCR/s/dk3h7y5vr exit(json_encode($res)); /** * 创建一个curl请求,用来请求第三方 * @param $url * @param array $data * @return array|bool|float|int|mixed|stdClass|string|null * User: wang * Date: 2021/9/6 18:13 */ function request_post($url , $data=array()){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); $output = curl_exec($ch); curl_close($ch); return json_decode($output,true); } /** * 获取AccessToken * @param $api_key * @param $secret_key * @return mixed|string * User: wang * Date: 2021/9/6 18:30 */ function getAccessToken($api_key,$secret_key){ $url = \'https://aip.baidubce.com/oauth/2.0/token\'; $post_data[\'grant_type\'] = \'client_credentials\'; $post_data[\'client_id\'] = $api_key; $post_data[\'client_secret\'] = $secret_key; $o = ""; foreach ( $post_data as $k => $v ) { $o.= "$k=" . urlencode( $v ). "&" ; } $post_data = substr($o,0,-1); $res = request_post($url, $post_data); if(!isset($res[\'access_token\'])){ exit($res[\'error\']); } return $res[\'access_token\']; }
如有不懂可留言,我看到会回的。 如果急需,那请加我QQ : 846951943