1. 程式人生 > 其它 >PHP 身份證識別

PHP 身份證識別

實現步驟:

  1. 前端上傳一張base64的圖片

  2. php接收,進行驗證

  3. 呼叫百度api進行識別

  4. 封裝返回資料

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'];
}