PHP脚本自动识别验证码查询汽车违章

5年以前  |  阅读数:527 次  |  编程语言:PHP 

经常有查下自己的车有没有违章,所以写了现在这个脚本,帮助查询自己的车是否违章。

主要用到,带cookie模拟表单提交和验证码识别。

Tesseract-OCR

验证码识别技术,Tesseract-OCR:https://github.com/tesseract-ocr/tesseract

安装教程:https://github.com/tesseract-ocr/tesseract

Tesseract-Ocr-For-PHP

把需要执行的命令,封装了一下

https://github.com/thiagoalessio/tesseract-ocr-for-php

直接上脚本,没进行什么优化,简单了解下:

PHP


    <?php
    require 'TesseractOCR.php';
    function weizhang($car_code, $fdjh)
    {
      $shanghui = mb_substr($car_code, 0, 1, 'utf-8');
      $pre = array(
        '冀' => 'he',
        '云' => 'yn'
      );
      $url_pre = $pre[$shanghui];
      $headers = array(
        'Host: '.$url_pre.'.122.gov.cn',
        'Origin: http://'.$url_pre.'.122.gov.cn',
        'Referer: http://'.$url_pre.'.122.gov.cn/views/inquiry.html?q=j',
        'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36 QQBrowser/4.1.4132.400'
      );
      //初始化变量
      $cookie_file = 'cookie.txt';
      $login_url = "http://$url_pre.122.gov.cn/views/inquiry.html?q=j";
      $post_url = "http://$url_pre.122.gov.cn/m/publicquery/vio";
      $verify_code_url = "http://$url_pre.122.gov.cn/captcha?nocache=".time();
      $curl = curl_init();
      $timeout = 5;
      curl_setopt($curl, CURLOPT_URL, $login_url);
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
      curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
      curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $timeout);
      curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_file); //获取COOKIE并存储
      $contents = curl_exec($curl);
      curl_close($curl);
      $curl = curl_init();
      curl_setopt($curl, CURLOPT_URL, $verify_code_url);
      curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file);
      curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
      $img = curl_exec($curl);
      curl_close($curl);
      $fp = fopen("verifyCode.jpg", "w");
      fwrite($fp, $img);
      fclose($fp);
      $code = (new TesseractOCR('verifyCode.jpg'))->psm(7)->run();
     $code = explode("\n", $code);
     $code = $code[1];
      echo $code.PHP_EOL;
      if (strlen($code) != 4) {
        return json_encode(array('code'=>500));
      }
      $data = array(
        'hpzl'=>'02',
        'hphm1b' => substr($car_code, -6),
        'hphm' => $car_code,
        'fdjh' => $fdjh,
        'captcha' => $code,
        'qm' => 'wf',
        'page' => 1
      );
      $curl = curl_init();
      curl_setopt($curl, CURLOPT_URL, $post_url);
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
      curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
      curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
      curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file);
      $result = curl_exec($curl);
      curl_close($curl);
      //unlink($cookie_file);
      //unlink('verifyCode.jpg');
      return $result;
    }
    $count = 0;
    // 车牌号
    $car_code = '冀Dxxxxx';
    // 发动机后6位
    $fdjh = 'xxxxxx';
    while (true) {
      $count++;
      if ($count>50) {
        exit('查询失败');
      }
      $res = weizhang($car_code, $fdjh);
      $info = json_decode($res, true);
      echo $res.PHP_EOL;
      if ($info['code'] == 200) {
        echo '车牌号: '. $car_code.PHP_EOL;
        echo '未处理违章数: '.$info['data']['content']['zs'];
        exit();
      }
    }

执行效果

以上所述是小编给大家介绍的PHP脚本自动识别验证码查询汽车违章,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例