首页 / 教程资源

php身份证识别ORC

发布时间:2023-03-08 18:14:32

先创建一个html,并以json格式传输到php文件

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 

<head> 

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

<title>身份证识别</title> 

<style> 

</style> 

<script> 

    window.onload = function(){ 

        var input = document.getElementById("demo_input"); 

        var result= document.getElementById("result"); 

        var img_area = document.getElementById("img_area"); 

        if ( typeof(FileReader) === 'undefined' ){

            result.innerHTML = "抱歉,你的浏览器不支持 FileReader,请使用现代浏览器操作!"; 

            input.setAttribute('disabled','disabled'); 

        }else{

            input.addEventListener('change',readFile,false);

        } 

    }

    function readFile(){

        var file = this.files[0]; 

        //这里我们判断下类型如果不是图片就返回 去掉就可以上传任意文件   

        if(!/image\/\w+/.test(file.type)){

            alert("请确保文件为图像类型"); 

            return false; 

        }

        var reader = new FileReader(); 

        reader.readAsDataURL(file); 

        console.log();

        reader.onload = function(e){ 

                result.innerHTML = this.result; 

                img_area.innerHTML = '<div class="sitetip">图片img标签展示:</div><img src="'+this.result+'" alt=""/>'; 

        }

    } 

</script> 

</head>

<body> 

    <form action="upload.php" method="post">

    <input type="file" value="sdgsdg" id="demo_input" /> 

    <textarea style='display: none;' name="img" id="result" rows=30 cols=300></textarea> 

    <p id="img_area"></p> 

    <input type="submit" value="提交">

</form>

</body> 

</html>

再创建个upload.php

<?php

header("Content-Type: text/html; charset=UTF-8");

/**

 * base64图片上传

 * @param $base64_img

 * @return array

 */

$base64_img = trim($_POST['img']);

$up_dir = 'upload/';//存放在当前目录的upload文件夹下

$fi_dir = 'ok_upload/';//存放在当前目录的upload文件夹下

if(!file_exists($up_dir)){

    mkdir($up_dir,0777);

}

if(preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64_img, $result)){

    $type = $result[2];

    if(in_array($type,array('pjpeg','jpeg','jpg','gif','bmp','png'))){

        $new_file = $up_dir.date('YmdHis_').'.'.$type;

        if(file_put_contents($new_file, base64_decode(str_replace($result[1], '', $base64_img)))){

  $img_path = str_replace('../../..', '', $new_file);

 $path   = 'upload/';

 $data   = file_get_contents($img_path);

 $base64 = base64_encode($data);

 $appkey = 'LzJu1grfwH6UaDX2';

 $params = array(

     'app_id'     => '1106920947',

                'image'      => $base64,

                'card_type'  => '0',

                'time_stamp' => strval(time()),

                'nonce_str'  => strval(rand()),

                'sign'       => '',

 );

 $params['sign'] = getReqSign($params, $appkey);

 // 执行API调用

 $url = 'https://api.ai.qq.com/fcgi-bin/ocr/ocr_idcardocr';//身份证识别OCR

 $response = doHttpPost($url, $params);

            echo $response;die;

 $arr = json_decode($response,true);

 $photo = base64_decode($arr['data']['image']);

 if(!file_exists($fi_dir)){

     mkdir($fi_dir,0777);

 }

 $type = 'jpg';

     if(in_array($type,array('pjpeg','jpeg','jpg','gif','bmp','png'))){

         $new_file = $fi_dir.date('YmdHis_').'.'.$type;

         if(file_put_contents($new_file, str_replace($result[1], '', $photo))){

             $img_paths = str_replace('../../..', '', $new_file);

             echo '图片处理成功</br><img src="' .$img_paths. '">';

         }else{

             echo '图片处理失败</br>';

         }

     }

        }else{

                    echo '图片上传失败</br>';

        }

    }else{

        //文件类型错误

    echo '图片上传类型错误';

    }

}else{

    //文件错误

    echo '文件错误';

}

// getReqSign :根据 接口请求参数 和 应用密钥 计算 请求签名

// 参数说明

//   - $params:接口请求参数(特别注意:不同的接口,参数对一般不一样,请以具体接口要求为准)

//   - $appkey:应用密钥

// 返回数据

//   - 签名结果

function getReqSign($params /* 关联数组 */, $appkey /* 字符串*/)

{

    // 1. 字典升序排序

    ksort($params);

    // 2. 拼按URL键值对

    $str = '';

    foreach ($params as $key => $value)

    {

        if ($value !== '')

        {

            $str .= $key . '=' . urlencode($value) . '&';

        }

    }

    // 3. 拼接app_key

    $str .= 'app_key=' . $appkey;

    // 4. MD5运算+转换大写,得到请求签名

    $sign = strtoupper(md5($str));

    return $sign;

}

// doHttpPost :执行POST请求,并取回响应结果

// 参数说明

//   - $url   :接口请求地址

//   - $params:完整接口请求参数(特别注意:不同的接口,参数对一般不一样,请以具体接口要求为准)

// 返回数据

//   - 返回false表示失败,否则表示API成功返回的HTTP BODY部分

function doHttpPost($url, $params)

{

    $curl = curl_init();

    $response = false;

    do

    {

        // 1. 设置HTTP URL (API地址)

        curl_setopt($curl, CURLOPT_URL, $url);

        // 2. 设置HTTP HEADER (表单POST)

        $head = array(

            'Content-Type: application/x-www-form-urlencoded'

        );

        curl_setopt($curl, CURLOPT_HTTPHEADER, $head);

        // 3. 设置HTTP BODY (URL键值对)

        $body = http_build_query($params);

        curl_setopt($curl, CURLOPT_POST, true);

        curl_setopt($curl, CURLOPT_POSTFIELDS, $body);

        // 4. 调用API,获取响应结果

        curl_setopt($curl, CURLOPT_HEADER, false);

        curl_setopt($curl, CURLOPT_NOBODY, false);

        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);

        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

        $response = curl_exec($curl);

        if ($response === false)

        {

            $response = false;

            break;

        }

        $code = curl_getinfo($curl, CURLINFO_HTTP_CODE);

        if ($code != 200)

        {

            $response = false;

            break;

        }

    } while (0);

    curl_close($curl);

    return $response;

}

这样就能识别身份证上的信息了

相关推荐