php 验证码技术(外卖库的 电话识别)

网上有写例子 写的,但我下载了都没法用 现在整理下。 如下代码是 外买库的 电话识别

   上代码:

<?php
/**
* 电话号码识别.
* @author by zsc for 2010.03.24
*/

class gjPhone {
    protected $imgPath; //图片路径  
    protected $imgSize; //图片大小
    protected $hecData; //分离后数组
    protected $horData; //横向整理的数据
    protected $verData; //纵向整理的数据
    function __construct($path) {
        $this->imgPath = $path;
    }
    /**
    * 颜色分离转换...
    *
    * @param unknown_type $path
    * @return unknown
    */
    public function getHec() {
        ;
        $size = getimagesize($this->imgPath);
        $res = imagecreatefromjpeg($this->imgPath);
        for ($i = 0; $i < $size[1]; ++ $i) {
            for ($j = 0; $j < $size[0]; ++ $j) {
                $rgb = imagecolorat($res, $j, $i);
                $rgbarray = imagecolorsforindex($res, $rgb);
                if ($rgbarray['red'] < 130 || $rgbarray['green'] < 180 || $rgbarray['blue'] < 40) {
                    $data[$i][$j] = 1;
                } else {
                    $data[$i][$j] = 0;
                }
            }
        }
        $this->imgSize = $size;
        $this->hecData = $data;
    }
    /**
    * 颜色分离后的数据横向整理...
    *
    * @return unknown
    */
    public function magHorData() {

        $data = $this->hecData;
        $size = $this->imgSize;
        $z = 0;
        for ($i = 0; $i < $size[1]; ++ $i) {
            if (in_array('1', $data[$i])) {
                $z++;
                for ($j = 0; $j < $size[0]; ++ $j) {
                    if ($data[$i][$j] == '1') {
                        $newdata[$z][$j] = 1;
                    } else {
                        $newdata[$z][$j] = 0;
                    }
                }
            }

        }
        return $this->horData = $newdata;
    }
    /**
    * 整理纵向数据...
    *
    * @return unknown
    */
    public function magVerData($newdata) {
        $count = count($newdata) + 1;
        $iii = count($newdata[1]) + 1;
        for ($i = 0; $i < $iii; ++ $i) {
            for ($j = 1; $j < $count; ++ $j) {
                $ndata[$i][$j] = @ $newdata[$j][$i];
            }
        }
        $sum = count($ndata);
        $c = 0;
        for ($a = 0; $a < $sum; $a++) {
            $value = $ndata[$a];
            if (in_array(1, $value)) {
                $ndatas[$c] = $value;
                $c++;
            }
            elseif (@ is_array($ndatas)) {
                $b = $c -1;
                if (in_array(1, $ndatas[$b])) {
                    $ndatas[$c] = $value;
                    $c++;
                }
            }
        }
        return $this->verData = $ndatas;

    }
    /**
    * 显示电话号码...
    *
    * @return unknown
    */
    public function showPhone($ndatas, $type = 1) {
        $phone = null;
        $d = 0;
        foreach ($ndatas as $key => $val) {
            if (in_array(1, $val)) {
                //处理 粘脸
                $b = array_count_values($val);
                if ($b[1] == 1) {
                    $d++;
                    continue;
                }
                foreach ($val as $k => $v) {
                    @ $ndArr[$d] .= $v;
                }
            } else {
                $d++;
            }
        }
        //        print_r($ndArr);
        foreach ($ndArr as $key01 => $val01) {
            if ($type == 1) {
                $phone .= $this->initData($val01);
            } else {
                $phone .= $this->initData2($val01);
            }

        }
        return $phone;
    }
    /**
    * 分离显示...
    *
    * @param unknown_type $dataArr
    */
    function drawWH($dataArr) {
        if (is_array($dataArr)) {
            foreach ($dataArr as $key => $val) {
                foreach ($val as $k => $v) {
                    if ($v == 0) {
                        $c .= "<font color='#FFFFFF'>" . $v . "</font>";
                    } else {
                        $c .= $v;
                    }
                }
                $c .= "<br/>";
            }
        }
        echo $c;
    }
    /**
    * 初始数据...
    *
    * @param unknown_type $numStr
    * @return unknown
    */
    public function initData($numStr) {
        $result = null;
        $data = array (
            0 => '0001111000011111111011110111111100111011111111001111111111110111111110',
            1 => '011000000011000000111111111111111111111100000000110000000011',
            2 => '110000001111000001111100001111110001111111111100110111100011',
            3 => '0000000011110000001111001100111100110011110111001111111111111111011110',
            4 => '0000011000000011110000111111000111001100111111111111111111110000001100',
            5 => '111110001111111000111101100011110110001111011111111000111110',
            6 => '0001111000011111111011111101111101100011110110001111011111111100111110',
            7 => '110000000011000000111100011111110111111011111100001110000000',
            8 => '0010001100111111111111111111111100110011110011001111111111111111011111',
            9 => ' 0011000000111111001111111100111100011011110011001111111111110111111110',
            '/' => '000000000111000000111110000011111000001111100000111110000000110000000000'
        );
        foreach ($data as $key => $val) {
            similar_text($numStr, $val, $pre);
            if ($pre > 98) { //相似度95%以上
                $result = $key;
                break;
            }
        }
        return $result;
    }
    public function initData2($numStr) {
        $result = null;
        $data = array (
            0 => '000111100000011111111000111101111100110011101100111111001100111111111100011111111000',
            1 => '011000000000110000001100111111111100111111111100000000001100000000001100',
            2 => '110000001100110000011100110000111100110001111100111111001100011110001100',
            3 => '000000001100110000001100110011001100110011001100110111001100111111111100111101111000',
            4 => '000001100000000011110000001111110000011100110000111111111100111111111100000000110000',
            5 => '111110001100111110001100110110001100110110001100110111111100100011111000',
            6 => '000111100000011111111000111111011100110110001100110110001100110111111100110011111000',
            7 => '110000000000110000001100110001111100110111111000111111000000111000000000',
            8 => '001000110000111111111100111111111100110011001100110011001100111111111100111101111100',
            9 => '001100000000111111001100111111001100110001101100110011001100111111111100011111111000',
            '/' => '000000000111000000111110000011111000001111100000111110000000110000000000'
        );
        foreach ($data as $key => $val) {
            similar_text($numStr, $val, $pre);
            if ($pre > 98) { //相似度95%以上
                $result = $key;
                break;
            }
        }
        return $result;
    }
}
?>
//==============================================



    其实关键是的 创建自体模型。多做些 就准确了


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值