接上篇某高校教务系统登陆验证码识别,由于上次的验证码识别率太低,不能用于实际应用。识别率低的原因在于对于字符的切割,因为字符粘连在一起,所以难以切割,一旦一个切割错误,就会导致后面字符的错误。
区别于传统的验证码识别方法,我自己针对该验证码的特性,想出了另外一种方法,这种方法不需要切割字符,也不需要去噪,将干扰线去除等,而且识别率非常高,有90%以上
我们先来观察验证码的特性
从图片可以看出,验证码上的每个字符都没有经过旋转,而且出现的高度,宽度是特定的。例如字符A,它的在图片中的高度,宽度是不变的,会变的只是它的位置。
于是我就想到,取出A的有效点坐标。什么是有效点坐标呢?
我先将图片二值化,然后把,一个完整的字符的二值化数组取出来,举例,下面我们来看看E的二值码
000000
000000
000000
000000
000000
000000
111111
110000
110000
110000
111111
110000
110000
110000
110000
111111
000000
000000
000000
我们可以看出这是个E,而值为1的点,我就称之为有效点,
以最上边的0为坐标原点,我可以得出每个有效点的坐标,将之存在数组中,如下
array(array(6,0),array(6,1),array(6,2),array(6,3),array(6,4),array(6,5),array(7,0),array(7,1),array(8,0),array(8,1),array(9,0),array(9,1),
array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(11,0),array(11,1),array(12,0),array(12,1),array(13,0),array(13,1),
array(14,0),array(14,1),array(15,0),array(15,1),array(15,2),array(15,3),array(15,4),array(15,5),),
由此可见,上面的数组,就包含了E的所有坐标信息
那么现在,假设我从整张验证码的二值码的第一行开始扫描
0000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000
0000000000000100000000000000000000000000000000
0000000000001000000000000000000000000000000000
0000001100011001111110111111001100000000000000
0000001100111001100000000111001100000000000000
0000001101011001100000000111001100000000000000
0000001110011001100000001110001111100000000000
0000001100011001111111111110001111110000000000
0000001100011001100000011101111111110000000000
0000011100011001100000011100001100110000000000
0000101100011001100000011100001100110000000000
0000101110111001100000011100001111110000000000
0001000111110001111110011000001111100000000000
0010000000000000000000000000001111000000000000
0100000000000000000000001111110000000000000000
0000000000000000011111110000000000000000000000
0000000000000011100000000000000000000000000000
我扫描第一行,如果第一行的某个0,其坐标,刚好可以成为上述E的坐标原点(判断的依据当然是,改点坐标加上E数组坐标,是不是都等到值为1的点),那么我们就可以确定E出现了,于是就匹配到了E
这种做法,就类似,你拿着一张只画有E的图片,贴在验证码图片上,从最左边开始移动,看验证码图片上是不是有跟这张E图片完全重合的地方,如果是,我们就几乎可以确定E出现了
由于不同字母,数字的坐标构成不可能完全相同,通过这种方式,我们就可以准确匹配出他们来
需要注意的问题是,有些较小个(体型较小,如c,t)的字符,可能在移动过程中,可以被较大的字符(如B,T,)等包含,解决的方法是,先匹配大字符,如果没有,再匹配小字符,这样就可以保证准确性(这个的实现,就是调整字符在key数组中的先后顺序,在完整代码中我们就可以看到)
由于只需要扫描第一行,而且一旦扫描到某个字符,我们就可以跳过这个字符长度的0,再继续扫描,所以这个算法的效率极高
下面贴出完整代码
<?php
include('snoopy.class.php');
class valite
{
protected $ImagePath = "ValidateCode.png";
protected $DataArray;
protected $ImageSize;
protected $data = "";
protected $keys;
protected $keysLen;
private $snoopy;//snoopy对象
private $url = 'http://202.116.0.176/ValidateCode.aspx';//验证码地址
//设置验证码图像路径
public function setImage($Image){
$this->ImagePath = $Image;
}
//获取验证码
public function getData(){
$this->getHec();
$this->run();
if(strlen($this->data)==4){
return $this->data;
}else{
return false;
}
// return if$this->data;
}
//获取验证码图片二值化数组
public function getResult(){
return $this->DataArray;
}
/*******************************************************************************************************************/
/**
* 获取验证码图片,并且展示一个手动填写的表单
*/
public function getValidateCode(){
$this->snoopy = new Snoopy();
$this->snoopy->fetch($this->url);
file_put_contents($this->ImagePath,$this->snoopy->results);
foreach($this->keys as $key => $value){
$arr = explode(20,$value);
$str = "";
foreach($arr as $a => $b){
$str .= substr($b,6);
}
//echo '"'.$key.'"=>"'.$str."\",<br>";
}
echo '<html><body><form action="index.php" method="post"><img src="'.$this->ImagePath.'"><input type="text" name="code"><input type="submit" value="submit"></form></body></html>';
}
/****************************************************************************************************************/
//将图像转换为二进制数组,干扰点被当成字符点
public function getHec()
{
$res = imagecreatefrompng($this->ImagePath);
$size = getimagesize($this->ImagePath);
$data = array();
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'] == 211 && $rgbarray['green'] == 211 && $rgbarray['blue'] == 211){//背景点
$data[$i][$j] = 0;
}else if($rgbarray['red'] == 105 && $rgbarray['green'] == 105 && $rgbarray['blue'] == 105){//干扰线
$data[$i][$j] = 1;
}else{
$data[$i][$j] = 1;
}
}
}
$this->ImageSize = $size;
$this->DataArray = $data;
}
//查找并且匹配验证码字符
public function run(){
for($j=0;$j<$this->ImageSize[0];$j++){//宽
foreach($this->keys as $keyname => $keycon){
for($k=0;$k<count($keycon);$k++){
if($this->DataArray[$keycon[$k][0]][$j+$keycon[$k][1]]!=1) break;
}
if($k==count($keycon)){
//echo "匹配出了".$keyname;
$this->data .= $keyname;
$j += $this->keysLen[$keyname]-1;
//echo $this->keysLen[$keyname]."<br>";
break;}
}
}
}
//根据二进制数组,生成单独字符的坐标数组,即用于生成$this->key
public function match(){
$str = file_get_contents("key.txt");
$new = array();
$arr = explode("\n",$str);
for($i=0;$i<count($arr);$i++){
for($j=0;$j<strlen($arr[$i]);$j++){
if($arr[$i]{$j}==1){
$new[] = array($i,$j);
}
}
}
$str ="array(";
foreach($new as $key => $value){
$str .= "array(".$value[0].','.$value[1]."),";
}
$str .= "),";
echo $str;
}
//生成坐标数组的长度,即用于生成$this->keysLen
public function check(){
foreach($this->keys as $key => $value){
$min = 0;$max=0;
foreach($value as $k => $v){
if($min > $v[1]) $min = $v[1];
if($max < $v[1]) $max = $v[1];
}
echo '"'.$key."\"=>".($max-$min+1).",";
}
}
//画出二进制图像
public function Draw(){
$this->getHec();
for($i=0; $i<$this->ImageSize[1]; ++$i)
{
for($j=0; $j<$this->ImageSize[0]; ++$j)
{
echo $this->DataArray[$i][$j];
}
echo "<br>";
}
}
public function __construct()
{
$this->keysLen = array("W"=>13,"y"=>7,"p"=>6,"D"=>7,"B"=>7,"U"=>7,"b"=>6,"a"=>6,"C"=>8,"A"=>9,"Z"=>7,"m"=>10,"2"=>6,"6"=>6,"w"=>11,"7"=>6,"N"=>7,"H"=>7,"v"=>7,"K"=>8,"G"=>8,"Y"=>8,"8"=>6,"9"=>6,"3"=>6,"g"=>6,"d"=>6,"t"=>4,"e"=>6,"V"=>9,"x"=>8,"q"=>6,"T"=>8,"5"=>6,"k"=>6,"R"=>8,"4"=>6,"S"=>7,"M"=>9,"E"=>6,"s"=>6,"X"=>9,"Q"=>8,"f"=>4,"P"=>7,"F"=>6,"z"=>5,"u"=>6,"h"=>6,"c"=>6,"n"=>6,"L"=>6,"r"=>4);
$this->keys = array(
'W' => array(array(6,0),array(6,1),array(6,2),array(6,5),array(6,6),array(6,7),array(6,10),array(6,11),array(6,12),array(7,0),array(7,1),array(7,2),array(7,4),array(7,5),array(7,6),array(7,7),array(7,8),array(7,10),array(7,11),array(7,12),array(8,0),array(8,1),array(8,2),array(8,4),array(8,5),array(8,6),array(8,7),array(8,8),array(8,10),array(8,11),array(8,12),array(9,0),array(9,1),array(9,2),array(9,4),array(9,5),array(9,6),array(9,7),array(9,8),array(9,10),array(9,11),array(9,12),array(10,1),array(10,2),array(10,4),array(10,5),array(10,7),array(10,8),array(10,10),array(10,11),array(11,1),array(11,2),array(11,3),array(11,4),array(11,5),array(11,7),array(11,8),array(11,9),array(11,10),array(11,11),array(12,1),array(12,2),array(12,3),array(12,4),array(12,5),array(12,7),array(12,8),array(12,9),array(12,10),array(12,11),array(13,1),array(13,2),array(13,3),array(13,4),array(13,5),array(13,7),array(13,8),array(13,9),array(13,10),array(13,11),array(14,1),array(14,2),array(14,3),array(14,4),array(14,8),array(14,9),array(14,10),array(14,11),array(15,2),array(15,3),array(15,4),array(15,8),array(15,9),array(15,10),),
'y' => array(array(9,0),array(9,1),array(9,2),array(9,4),array(9,5),array(9,6),array(10,0),array(10,1),array(10,2),array(10,4),array(10,5),array(10,6),array(11,0),array(11,1),array(11,2),array(11,4),array(11,5),array(11,6),array(12,1),array(12,2),array(12,3),array(12,4),array(12,5),array(13,1),array(13,2),array(13,3),array(13,4),array(13,5),array(14,1),array(14,2),array(14,3),array(14,4),array(14,5),array(15,2),array(15,3),array(15,4),array(15,5),array(16,2),array(16,3),array(16,4),array(17,1),array(17,2),array(17,3),array(17,4),array(18,0),array(18,1),array(18,2),array(18,3),),
'p' => array(array(9,0),array(9,1),array(9,2),array(9,3),array(9,4),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(11,0),array(11,1),array(11,4),array(11,5),array(12,0),array(12,1),array(12,4),array(12,5),array(13,0),array(13,1),array(13,4),array(13,5),array(14,0),array(14,1),array(14,2),array(14,3),array(14,4),array(14,5),array(15,0),array(15,1),array(15,2),array(15,3),array(15,4),array(16,0),array(16,1),array(17,0),array(17,1),array(18,0),array(18,1),),
'D' => array(array(6,0),array(6,1),array(6,2),array(6,3),array(6,4),array(6,5),array(7,0),array(7,1),array(7,4),array(7,5),array(7,6),array(8,0),array(8,1),array(8,4),array(8,5),array(8,6),array(9,0),array(9,1),array(9,5),array(9,6),array(10,0),array(10,1),array(10,5),array(10,6),array(11,0),array(11,1),array(11,5),array(11,6),array(12,0),array(12,1),array(12,5),array(12,6),array(13,0),array(13,1),array(13,4),array(13,5),array(13,6),array(14,0),array(14,1),array(14,4),array(14,5),array(14,6),array(15,0),array(15,1),array(15,2),array(15,3),array(15,4),array(15,5),),
'B' => array(array(6,0),array(6,1),array(6,2),array(6,3),array(6,4),array(6,5),array(6,6),array(7,0),array(7,1),array(7,4),array(7,5),array(7,6),array(8,0),array(8,1),array(8,5),array(8,6),array(9,0),array(9,1),array(9,4),array(9,5),array(9,6),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(10,6),array(11,0),array(11,1),array(11,4),array(11,5),array(11,6),array(12,0),array(12,1),array(12,5),array(12,6),array(13,0),array(13,1),array(13,5),array(13,6),array(14,0),array(14,1),array(14,4),array(14,5),array(14,6),array(15,0),array(15,1),array(15,2),array(15,3),array(15,4),array(15,5),),
'U' => array(array(6,0),array(6,1),array(6,5),array(6,6),array(7,0),array(7,1),array(7,5),array(7,6),array(8,0),array(8,1),array(8,5),array(8,6),array(9,0),array(9,1),array(9,5),array(9,6),array(10,0),array(10,1),array(10,5),array(10,6),array(11,0),array(11,1),array(11,5),array(11,6),array(12,0),array(12,1),array(12,5),array(12,6),array(13,0),array(13,1),array(13,5),array(13,6),array(14,0),array(14,1),array(14,2),array(14,4),array(14,5),array(14,6),array(15,1),array(15,2),array(15,3),array(15,4),array(15,5),),
'b' => array(array(6,0),array(6,1),array(7,0),array(7,1),array(8,0),array(8,1),array(9,0),array(9,1),array(9,2),array(9,3),array(9,4),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(11,0),array(11,1),array(11,4),array(11,5),array(12,0),array(12,1),array(12,4),array(12,5),array(13,0),array(13,1),array(13,4),array(13,5),array(14,0),array(14,1),array(14,2),array(14,3),array(14,4),array(14,5),array(15,0),array(15,1),array(15,2),array(15,3),array(15,4),),
'a' => array(array(9,0),array(9,1),array(9,2),array(9,3),array(9,4),array(9,5),array(10,0),array(10,1),array(10,3),array(10,4),array(10,5),array(11,1),array(11,2),array(11,3),array(11,4),array(11,5),array(12,0),array(12,1),array(12,2),array(12,3),array(12,4),array(12,5),array(13,0),array(13,1),array(13,4),array(13,5),array(14,0),array(14,1),array(14,2),array(14,3),array(14,4),array(14,5),array(15,0),array(15,1),array(15,2),array(15,3),array(15,4),array(15,5),),
'C' => array(array(6,2),array(6,3),array(6,4),array(6,5),array(6,6),array(7,1),array(7,2),array(7,3),array(7,5),array(7,6),array(7,7),array(8,0),array(8,1),array(8,2),array(9,0),array(9,1),array(10,0),array(10,1),array(11,0),array(11,1),array(12,0),array(12,1),array(13,0),array(13,1),array(13,2),array(14,0),array(14,1),array(14,2),array(14,3),array(14,5),array(14,6),array(14,7),array(15,1),array(15,2),array(15,3),array(15,4),array(15,5),array(15,6),),
'A' => array(array(6,3),array(6,4),array(6,5),array(7,2),array(7,3),array(7,4),array(7,5),array(7,6),array(8,2),array(8,3),array(8,4),array(8,5),array(8,6),array(9,2),array(9,3),array(9,4),array(9,5),array(9,6),array(10,1),array(10,2),array(10,3),array(10,5),array(10,6),array(10,7),array(11,1),array(11,2),array(11,3),array(11,5),array(11,6),array(11,7),array(12,1),array(12,2),array(12,3),array(12,5),array(12,6),array(12,7),array(13,0),array(13,1),array(13,2),array(13,3),array(13,4),array(13,5),array(13,6),array(13,7),array(13,8),array(14,0),array(14,1),array(14,2),array(14,6),array(14,7),array(14,8),array(15,0),array(15,1),array(15,2),array(15,6),array(15,7),array(15,8),),
'Z' => array(array(6,0),array(6,1),array(6,2),array(6,3),array(6,4),array(6,5),array(6,6),array(7,4),array(7,5),array(7,6),array(8,4),array(8,5),array(8,6),array(9,3),array(9,4),array(9,5),array(10,2),array(10,3),array(10,4),array(11,2),array(11,3),array(11,4),array(12,1),array(12,2),array(12,3),array(13,0),array(13,1),array(13,2),array(13,3),array(14,0),array(14,1),array(14,2),array(15,0),array(15,1),array(15,2),array(15,3),array(15,4),array(15,5),array(15,6),),
'm' => array(array(9,0),array(9,1),array(9,2),array(9,3),array(9,4),array(9,5),array(9,6),array(9,7),array(9,8),array(9,9),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(10,6),array(10,7),array(10,8),array(10,9),array(11,0),array(11,1),array(11,4),array(11,5),array(11,8),array(11,9),array(12,0),array(12,1),array(12,4),array(12,5),array(12,8),array(12,9),array(13,0),array(13,1),array(13,4),array(13,5),array(13,8),array(13,9),array(14,0),array(14,1),array(14,4),array(14,5),array(14,8),array(14,9),array(15,0),array(15,1),array(15,4),array(15,5),array(15,8),array(15,9),),
'2' => array(array(6,0),array(7,0),array(13,0),array(14,0),array(15,0),array(6,1),array(7,1),array(12,1),array(13,1),array(14,1),array(15,1),array(6,2),array(7,2),array(11,2),array(12,2),array(13,2),array(14,2),array(15,2),array(6,3),array(7,3),array(9,3),array(10,3),array(11,3),array(12,3),array(13,3),array(15,3),array(6,4),array(7,4),array(8,4),array(9,4),array(10,4),array(11,4),array(12,4),array(15,4),array(7,5),array(8,5),array(9,5),array(10,5),array(15,5)),
'6' => array(array(6,1),array(6,2),array(6,3),array(6,4),array(6,5),array(7,0),array(7,1),array(7,2),array(7,3),array(7,4),array(7,5),array(8,0),array(8,1),array(9,0),array(9,1),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(11,0),array(11,1),array(11,2),array(11,3),array(11,4),array(11,5),array(12,0),array(12,1),array(12,4),array(12,5),array(13,0),array(13,1),array(13,4),array(13,5),array(14,0),array(14,1),array(14,2),array(14,3),array(14,4),array(14,5),array(15,1),array(15,2),array(15,3),array(15,4),),
's' => array(array(9,0),array(9,1),array(9,2),array(9,3),array(9,4),array(9,5),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(11,0),array(11,1),array(11,2),array(11,3),array(11,4),array(12,0),array(12,1),array(12,2),array(12,3),array(12,4),array(12,5),array(13,2),array(13,3),array(13,4),array(13,5),array(14,0),array(14,1),array(14,2),array(14,3),array(14,4),array(14,5),array(15,0),array(15,1),array(15,2),array(15,3),array(15,4),array(15,5),),
'w' => array(array(9,0),array(9,1),array(9,2),array(9,4),array(9,5),array(9,6),array(9,9),array(9,10),array(10,0),array(10,1),array(10,2),array(10,4),array(10,5),array(10,6),array(10,8),array(10,9),array(10,10),array(11,0),array(11,1),array(11,2),array(11,4),array(11,5),array(11,6),array(11,8),array(11,9),array(11,10),array(12,1),array(12,2),array(12,3),array(12,4),array(12,5),array(12,6),array(12,7),array(12,8),array(12,9),array(13,1),array(13,2),array(13,3),array(13,4),array(13,6),array(13,7),array(13,8),array(13,9),array(14,1),array(14,2),array(14,3),array(14,4),array(14,6),array(14,7),array(14,8),array(14,9),array(15,2),array(15,3),array(15,4),array(15,6),array(15,7),array(15,8),),
'7' => array(array(6,0),array(6,1),array(11,1),array(12,1),array(13,1),array(14,1),array(6,2),array(9,2),array(10,2),array(11,2),array(12,2),array(13,2),array(14,2),array(15,2),array(6,3),array(7,3),array(8,3),array(9,3),array(10,3),array(11,3),array(12,3),array(13,3),array(14,3),array(6,4),array(7,4),array(8,4),array(9,4),array(10,4),array(6,5),array(7,5),array(8,5),array(15,1),),
'N' => array(array(6,0),array(6,1),array(6,2),array(6,5),array(6,6),array(7,0),array(7,1),array(7,2),array(7,5),array(7,6),array(8,0),array(8,1),array(8,2),array(8,3),array(8,5),array(8,6),array(9,0),array(9,1),array(9,2),array(9,3),array(9,5),array(9,6),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(10,6),array(11,0),array(11,1),array(11,2),array(11,3),array(11,4),array(11,5),array(11,6),array(12,0),array(12,1),array(12,3),array(12,4),array(12,5),array(12,6),array(13,0),array(13,1),array(13,4),array(13,5),array(13,6),array(14,0),array(14,1),array(14,4),array(14,5),array(14,6),array(15,0),array(15,1),array(15,5),array(15,6),),
'H' => array(array(6,0),array(6,1),array(6,5),array(6,6),array(7,0),array(7,1),array(7,5),array(7,6),array(8,0),array(8,1),array(8,5),array(8,6),array(9,0),array(9,1),array(9,5),array(9,6),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(10,6),array(11,0),array(11,1),array(11,5),array(11,6),array(12,0),array(12,1),array(12,5),array(12,6),array(13,0),array(13,1),array(13,5),array(13,6),array(14,0),array(14,1),array(14,5),array(14,6),array(15,0),array(15,1),array(15,5),array(15,6),),
'v' => array(array(9,0),array(9,1),array(9,5),array(9,6),array(10,0),array(10,1),array(10,2),array(10,4),array(10,5),array(10,6),array(11,0),array(11,1),array(11,2),array(11,4),array(11,5),array(11,6),array(12,1),array(12,2),array(12,3),array(12,4),array(12,5),array(13,1),array(13,2),array(13,3),array(13,4),array(13,5),array(14,2),array(14,3),array(14,4),array(15,2),array(15,3),array(15,4),),
'K' => array(array(6,0),array(6,1),array(6,5),array(6,6),array(6,7),array(7,0),array(7,1),array(7,4),array(7,5),array(7,6),array(8,0),array(8,1),array(8,3),array(8,4),array(8,5),array(9,0),array(9,1),array(9,2),array(9,3),array(9,4),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(11,0),array(11,1),array(11,2),array(11,3),array(11,4),array(11,5),array(12,0),array(12,1),array(12,2),array(12,4),array(12,5),array(13,0),array(13,1),array(13,4),array(13,5),array(13,6),array(14,0),array(14,1),array(14,4),array(14,5),array(14,6),array(15,0),array(15,1),array(15,5),array(15,6),array(15,7),),
'G' => array(array(6,2),array(6,3),array(6,4),array(6,5),array(6,6),array(7,1),array(7,2),array(7,3),array(7,5),array(7,6),array(7,7),array(8,0),array(8,1),array(8,2),array(9,0),array(9,1),array(10,0),array(10,1),array(11,0),array(11,1),array(11,4),array(11,5),array(11,6),array(11,7),array(12,0),array(12,1),array(12,2),array(12,6),array(12,7),array(13,0),array(13,1),array(13,2),array(13,6),array(13,7),array(14,1),array(14,2),array(14,3),array(14,5),array(14,6),array(14,7),array(15,2),array(15,3),array(15,4),array(15,5),array(15,6),array(15,7),),
'Y' => array(array(6,0),array(6,1),array(6,6),array(6,7),array(7,0),array(7,1),array(7,2),array(7,5),array(7,6),array(7,7),array(8,1),array(8,2),array(8,3),array(8,4),array(8,5),array(8,6),array(9,1),array(9,2),array(9,3),array(9,4),array(9,5),array(9,6),array(10,2),array(10,3),array(10,4),array(10,5),array(11,2),array(11,3),array(11,4),array(11,5),array(12,3),array(12,4),array(13,3),array(13,4),array(14,3),array(14,4),array(15,3),array(15,4),),
'8' =>array(array(6,0),array(6,1),array(6,2),array(6,3),array(6,4),array(6,5),array(7,0),array(7,1),array(7,2),array(7,3),array(7,4),array(7,5),array(8,0),array(8,1),array(8,4),array(8,5),array(9,0),array(9,1),array(9,2),array(9,3),array(9,4),array(9,5),array(10,1),array(10,2),array(10,3),array(10,4),array(11,0),array(11,1),array(11,2),array(11,3),array(11,4),array(11,5),array(12,0),array(12,1),array(12,4),array(12,5),array(13,0),array(13,1),array(13,4),array(13,5),array(14,0),array(14,1),array(14,2),array(14,3),array(14,4),array(14,5),array(15,1),array(15,2),array(15,3),array(15,4),),
'9' => array(array(6,1),array(6,2),array(6,3),array(6,4),array(7,0),array(7,1),array(7,2),array(7,3),array(7,4),array(7,5),array(8,0),array(8,1),array(8,4),array(8,5),array(9,0),array(9,1),array(9,4),array(9,5),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(11,1),array(11,2),array(11,3),array(11,4),array(11,5),array(12,4),array(12,5),array(13,4),array(13,5),array(14,0),array(14,1),array(14,2),array(14,3),array(14,4),array(14,5),array(15,0),array(15,1),array(15,2),array(15,3),array(15,4),),
'3' => array(array(6,0),array(6,1),array(6,2),array(6,3),array(6,4),array(7,0),array(7,1),array(7,2),array(7,3),array(7,4),array(7,5),array(8,4),array(8,5),array(9,3),array(9,4),array(9,5),array(10,2),array(10,3),array(10,4),array(11,3),array(11,4),array(11,5),array(12,4),array(12,5),array(13,4),array(13,5),array(14,0),array(14,1),array(14,2),array(14,3),array(14,4),array(14,5),array(15,0),array(15,1),array(15,2),array(15,3),array(15,4),),
'g' => array(array(9,1),array(9,2),array(9,3),array(9,4),array(9,5),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(11,0),array(11,1),array(11,4),array(11,5),array(12,0),array(12,1),array(12,4),array(12,5),array(13,0),array(13,1),array(13,4),array(13,5),array(14,0),array(14,1),array(14,2),array(14,3),array(14,4),array(14,5),array(15,1),array(15,2),array(15,3),array(15,4),array(15,5),array(16,4),array(16,5),array(17,0),array(17,1),array(17,3),array(17,4),array(17,5),array(18,0),array(18,1),array(18,2),array(18,3),array(18,4),array(18,5),),
'd' => array(array(6,4),array(6,5),array(7,4),array(7,5),array(8,4),array(8,5),array(9,1),array(9,2),array(9,3),array(9,4),array(9,5),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(11,0),array(11,1),array(11,4),array(11,5),array(12,0),array(12,1),array(12,4),array(12,5),array(13,0),array(13,1),array(13,4),array(13,5),array(14,0),array(14,1),array(14,2),array(14,3),array(14,4),array(14,5),array(15,1),array(15,2),array(15,3),array(15,4),array(15,5),),
't' => array(array(7,1),array(7,2),array(8,1),array(8,2),array(9,0),array(9,1),array(9,2),array(9,3),array(10,1),array(10,2),array(11,1),array(11,2),array(12,1),array(12,2),array(13,1),array(13,2),array(14,1),array(14,2),array(15,1),array(15,2),array(15,3),),
'e' => array(array(9,1),array(9,2),array(9,3),array(9,4),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(11,0),array(11,1),array(11,4),array(11,5),array(12,0),array(12,1),array(12,2),array(12,3),array(12,4),array(12,5),array(13,0),array(13,1),array(14,0),array(14,1),array(14,2),array(14,3),array(14,4),array(14,5),array(15,1),array(15,2),array(15,3),array(15,4),array(15,5),),
'V' => array(array(6,0),array(6,1),array(6,2),array(6,6),array(6,7),array(6,8),array(7,0),array(7,1),array(7,2),array(7,6),array(7,7),array(7,8),array(8,0),array(8,1),array(8,2),array(8,6),array(8,7),array(8,8),array(9,1),array(9,2),array(9,3),array(9,5),array(9,6),array(9,7),array(10,1),array(10,2),array(10,3),array(10,5),array(10,6),array(10,7),array(11,1),array(11,2),array(11,3),array(11,5),array(11,6),array(11,7),array(12,2),array(12,3),array(12,4),array(12,5),array(12,6),array(13,2),array(13,3),array(13,4),array(13,5),array(13,6),array(14,2),array(14,3),array(14,4),array(14,5),array(14,6),array(15,3),array(15,4),array(15,5),),
'x' => array(array(9,0),array(9,1),array(9,2),array(9,5),array(9,6),array(9,7),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(10,6),array(11,2),array(11,3),array(11,4),array(11,5),array(12,2),array(12,3),array(12,4),array(12,5),array(13,2),array(13,3),array(13,4),array(13,5),array(14,1),array(14,2),array(14,3),array(14,4),array(14,5),array(14,6),array(15,0),array(15,1),array(15,2),array(15,5),array(15,6),array(15,7),),
'q' => array(array(9,1),array(9,2),array(9,3),array(9,4),array(9,5),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(11,0),array(11,1),array(11,4),array(11,5),array(12,0),array(12,1),array(12,4),array(12,5),array(13,0),array(13,1),array(13,4),array(13,5),array(14,0),array(14,1),array(14,2),array(14,3),array(14,4),array(14,5),array(15,1),array(15,2),array(15,3),array(15,4),array(15,5),array(16,4),array(16,5),array(17,4),array(17,5),array(18,4),array(18,5),),
'T' => array(array(6,0),array(6,1),array(6,2),array(6,3),array(6,4),array(6,5),array(6,6),array(6,7),array(7,3),array(7,4),array(8,3),array(8,4),array(9,3),array(9,4),array(10,3),array(10,4),array(11,3),array(11,4),array(12,3),array(12,4),array(13,3),array(13,4),array(14,3),array(14,4),array(15,3),array(15,4),),
'5' => array(array(6,0),array(6,1),array(6,2),array(6,3),array(6,4),array(6,5),array(7,0),array(7,1),array(7,2),array(8,0),array(8,1),array(8,2),array(9,0),array(9,1),array(9,2),array(9,3),array(9,4),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(11,4),array(11,5),array(12,4),array(12,5),array(13,4),array(13,5),array(14,0),array(14,1),array(14,2),array(14,3),array(14,4),array(14,5),array(15,0),array(15,1),array(15,2),array(15,3),array(15,4),),
'k' => array(array(6,0),array(6,1),array(7,0),array(7,1),array(8,0),array(8,1),array(9,0),array(9,1),array(9,3),array(9,4),array(9,5),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(11,0),array(11,1),array(11,2),array(11,3),array(12,0),array(12,1),array(12,2),array(12,3),array(12,4),array(13,0),array(13,1),array(13,2),array(13,3),array(13,4),array(14,0),array(14,1),array(14,3),array(14,4),array(14,5),array(15,0),array(15,1),array(15,4),array(15,5),),
'R' => array(array(6,0),array(6,1),array(6,2),array(6,3),array(6,4),array(6,5),array(6,6),array(7,0),array(7,1),array(7,4),array(7,5),array(7,6),array(8,0),array(8,1),array(8,5),array(8,6),array(9,0),array(9,1),array(9,5),array(9,6),array(10,0),array(10,1),array(10,4),array(10,5),array(10,6),array(11,0),array(11,1),array(11,2),array(11,3),array(11,4),array(11,5),array(12,0),array(12,1),array(12,3),array(12,4),array(12,5),array(13,0),array(13,1),array(13,4),array(13,5),array(13,6),array(14,0),array(14,1),array(14,5),array(14,6),array(14,7),array(15,0),array(15,1),array(15,5),array(15,6),array(15,7),),
'4' => array(array(6,3),array(6,4),array(7,2),array(7,3),array(7,4),array(8,2),array(8,3),array(8,4),array(9,1),array(9,2),array(9,3),array(9,4),array(10,1),array(10,2),array(10,3),array(10,4),array(11,0),array(11,1),array(11,3),array(11,4),array(12,0),array(12,1),array(12,3),array(12,4),array(13,0),array(13,1),array(13,2),array(13,3),array(13,4),array(13,5),array(14,3),array(14,4),array(15,3),array(15,4),),
'S' => array(array(6,1),array(6,2),array(6,3),array(6,4),array(6,5),array(6,6),array(7,0),array(7,1),array(7,2),array(7,4),array(7,5),array(7,6),array(8,0),array(8,1),array(8,2),array(9,0),array(9,1),array(9,2),array(9,3),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(11,1),array(11,2),array(11,3),array(11,4),array(11,5),array(11,6),array(12,3),array(12,4),array(12,5),array(12,6),array(13,4),array(13,5),array(13,6),array(14,0),array(14,1),array(14,2),array(14,4),array(14,5),array(14,6),array(15,0),array(15,1),array(15,2),array(15,3),array(15,4),array(15,5),),
'M' => array(array(6,0),array(6,1),array(6,2),array(6,6),array(6,7),array(6,8),array(7,0),array(7,1),array(7,2),array(7,3),array(7,5),array(7,6),array(7,7),array(7,8),array(8,0),array(8,1),array(8,2),array(8,3),array(8,5),array(8,6),array(8,7),array(8,8),array(9,0),array(9,1),array(9,2),array(9,3),array(9,5),array(9,6),array(9,7),array(9,8),array(10,0),array(10,1),array(10,2),array(10,3),array(10,5),array(10,6),array(10,7),array(10,8),array(11,0),array(11,1),array(11,2),array(11,3),array(11,4),array(11,5),array(11,6),array(11,7),array(11,8),array(12,0),array(12,1),array(12,2),array(12,3),array(12,4),array(12,5),array(12,6),array(12,7),array(12,8),array(13,0),array(13,1),array(13,3),array(13,4),array(13,5),array(13,7),array(13,8),array(14,0),array(14,1),array(14,3),array(14,4),array(14,5),array(14,7),array(14,8),array(15,0),array(15,1),array(15,3),array(15,4),array(15,5),array(15,7),array(15,8),),
'E' => array(array(6,0),array(6,1),array(6,2),array(6,3),array(6,4),array(6,5),array(7,0),array(7,1),array(8,0),array(8,1),array(9,0),array(9,1),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(11,0),array(11,1),array(12,0),array(12,1),array(13,0),array(13,1),array(14,0),array(14,1),array(15,0),array(15,1),array(15,2),array(15,3),array(15,4),array(15,5),),
'X' => array(array(6,0),array(6,1),array(6,2),array(6,6),array(6,7),array(6,8),array(7,1),array(7,2),array(7,3),array(7,5),array(7,6),array(7,7),array(8,1),array(8,2),array(8,3),array(8,4),array(8,5),array(8,6),array(8,7),array(9,2),array(9,3),array(9,4),array(9,5),array(9,6),array(10,3),array(10,4),array(10,5),array(11,3),array(11,4),array(11,5),array(12,2),array(12,3),array(12,4),array(12,5),array(12,6),array(13,1),array(13,2),array(13,3),array(13,4),array(13,5),array(13,6),array(13,7),array(14,1),array(14,2),array(14,3),array(14,5),array(14,6),array(14,7),array(15,0),array(15,1),array(15,2),array(15,6),array(15,7),array(15,8),),
'Q' => array(array(6,1),array(6,2),array(6,3),array(6,4),array(6,5),array(6,6),array(7,0),array(7,1),array(7,2),array(7,3),array(7,4),array(7,5),array(7,6),array(8,0),array(8,1),array(8,2),array(8,5),array(8,6),array(8,7),array(9,0),array(9,1),array(9,6),array(9,7),array(10,0),array(10,1),array(10,6),array(10,7),array(11,0),array(11,1),array(11,6),array(11,7),array(12,0),array(12,1),array(12,2),array(12,6),array(12,7),array(13,0),array(13,1),array(13,2),array(13,4),array(13,5),array(13,6),array(13,7),array(14,0),array(14,1),array(14,2),array(14,3),array(14,4),array(14,5),array(14,6),array(14,7),array(15,1),array(15,2),array(15,3),array(15,4),array(15,5),array(15,6),array(15,7),array(16,6),array(16,7),),
'f' => array(array(6,1),array(6,2),array(6,3),array(7,1),array(7,2),array(8,1),array(8,2),array(9,0),array(9,1),array(9,2),array(9,3),array(10,1),array(10,2),array(11,1),array(11,2),array(12,1),array(12,2),array(13,1),array(13,2),array(14,1),array(14,2),array(15,1),array(15,2),),
'P' =>array(array(6,0),array(6,1),array(6,2),array(6,3),array(6,4),array(6,5),array(6,6),array(7,0),array(7,1),array(7,4),array(7,5),array(7,6),array(8,0),array(8,1),array(8,5),array(8,6),array(9,0),array(9,1),array(9,5),array(9,6),array(10,0),array(10,1),array(10,4),array(10,5),array(10,6),array(11,0),array(11,1),array(11,2),array(11,3),array(11,4),array(11,5),array(12,0),array(12,1),array(13,0),array(13,1),array(14,0),array(14,1),array(15,0),array(15,1),),
'F' => array(array(6,0),array(6,1),array(6,2),array(6,3),array(6,4),array(6,5),array(7,0),array(7,1),array(8,0),array(8,1),array(9,0),array(9,1),array(10,0),array(10,1),array(11,0),array(11,1),array(11,2),array(11,3),array(11,4),array(11,5),array(12,0),array(12,1),array(13,0),array(13,1),array(14,0),array(14,1),array(15,0),array(15,1),),
'z' => array(array(9,0),array(9,1),array(9,2),array(9,3),array(9,4),array(10,2),array(10,3),array(10,4),array(11,2),array(11,3),array(11,4),array(12,1),array(12,2),array(12,3),array(13,0),array(13,1),array(13,2),array(14,0),array(14,1),array(14,2),array(15,0),array(15,1),array(15,2),array(15,3),array(15,4),),
'u' => array(array(9,0),array(9,1),array(9,4),array(9,5),array(10,0),array(10,1),array(10,4),array(10,5),array(11,0),array(11,1),array(11,4),array(11,5),array(12,0),array(12,1),array(12,4),array(12,5),array(13,0),array(13,1),array(13,4),array(13,5),array(14,0),array(14,1),array(14,2),array(14,3),array(14,4),array(14,5),array(15,0),array(15,1),array(15,2),array(15,3),array(15,4),array(15,5),),
'h' => array(array(6,0),array(6,1),array(7,0),array(7,1),array(8,0),array(8,1),array(9,0),array(9,1),array(9,2),array(9,3),array(9,4),array(9,5),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(11,0),array(11,1),array(11,4),array(11,5),array(12,0),array(12,1),array(12,4),array(12,5),array(13,0),array(13,1),array(13,4),array(13,5),array(14,0),array(14,1),array(14,4),array(14,5),array(15,0),array(15,1),array(15,4),array(15,5),),
'c' => array(array(9,1),array(9,2),array(9,3),array(9,4),array(9,5),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(11,0),array(11,1),array(12,0),array(12,1),array(13,0),array(13,1),array(14,0),array(14,1),array(14,2),array(14,3),array(14,4),array(14,5),array(15,1),array(15,2),array(15,3),array(15,4),array(15,5),),
't' => array(array(7,1),array(7,2),array(8,1),array(8,2),array(9,0),array(9,1),array(9,2),array(9,3),array(10,1),array(10,2),array(11,1),array(11,2),array(12,1),array(12,2),array(13,1),array(13,2),array(14,1),array(14,2),array(15,1),array(15,2),array(15,3),),
'n' => array(array(9,0),array(9,1),array(9,2),array(9,3),array(9,4),array(9,5),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(11,0),array(11,1),array(11,4),array(11,5),array(12,0),array(12,1),array(12,4),array(12,5),array(13,0),array(13,1),array(13,4),array(13,5),array(14,0),array(14,1),array(14,4),array(14,5),array(15,0),array(15,1),array(15,4),array(15,5),),
'L' => array(array(6,0),array(6,1),array(7,0),array(7,1),array(8,0),array(8,1),array(9,0),array(9,1),array(10,0),array(10,1),array(11,0),array(11,1),array(12,0),array(12,1),array(13,0),array(13,1),array(14,0),array(14,1),array(15,0),array(15,1),array(15,2),array(15,3),array(15,4),array(15,5),),
'r' => array(array(9,0),array(9,1),array(9,2),array(9,3),array(10,0),array(10,1),array(10,2),array(10,3),array(11,0),array(11,1),array(12,0),array(12,1),array(13,0),array(13,1),array(14,0),array(14,1),array(15,0),array(15,1),),
);
}
}
?>
使用代码
<?php
include('valite.class.php');
$test = new valite();
$test->getValidateCode();
$test->Draw();
var_dump($test->getData());
结果图示例
该算法的准确率极高,唯一的麻烦是,获取字模的过程(也就是坐标数组的过程)比较繁杂,我提供了match()方法了实现这个过程,但是还是需要先手动把某个字符的二值化码保存在key.txt文件里面。
check()方法是用于生成所有字符长度
下面贴两套key
准确
$this->keysLen = array("2"=>6,"8"=>6,"3"=>6,"4"=>6,"5"=>6,"6"=>6,"7"=>6,"9"=>6,"A"=>9,"B"=>7,"G"=>8,"C"=>8,"D"=>7,"E"=>6,"H"=>7,"K"=>7,"M"=>9,"N"=>7,"L"=>6,"R"=>8,"P"=>7,"F"=>6,"Q"=>8,"S"=>7,"T"=>8,"X"=>7,"U"=>7,"V"=>9,"W"=>13,"Y"=>8,"Z"=>7,"a"=>6,"b"=>6,"c"=>6,"d"=>6,"h"=>6,"e"=>6,"g"=>6,"f"=>5,"k"=>6,"m"=>10,"n"=>6,"p"=>6,"q"=>6,"t"=>4,"s"=>6,"u"=>6,"r"=>4,"w"=>11,"y"=>7,"v"=>7,"x"=>6,"z"=>5,);
$this->keys = array(
'2' => array(array(6,1),array(6,2),array(6,3),array(6,4),array(7,0),array(7,1),array(7,4),array(7,5),array(8,4),array(8,5),array(9,4),array(9,5),array(10,3),array(10,4),array(11,2),array(11,3),array(11,4),array(12,2),array(12,3),array(13,1),array(13,2),array(14,0),array(14,1),array(15,0),array(15,1),array(15,2),array(15,3),array(15,4),array(15,5),),
'8' => array(array(6,1),array(6,2),array(6,3),array(6,4),array(7,0),array(7,1),array(7,4),array(7,5),array(8,0),array(8,1),array(8,4),array(8,5),array(9,0),array(9,1),array(9,4),array(9,5),array(10,1),array(10,2),array(10,3),array(10,4),array(11,0),array(11,1),array(11,4),array(11,5),array(12,0),array(12,1),array(12,4),array(12,5),array(13,0),array(13,1),array(13,4),array(13,5),array(14,0),array(14,1),array(14,4),array(14,5),array(15,1),array(15,2),array(15,3),array(15,4),),
'3' => array(array(6,1),array(6,2),array(6,3),array(6,4),array(7,0),array(7,1),array(7,4),array(7,5),array(8,4),array(8,5),array(9,4),array(9,5),array(10,2),array(10,3),array(10,4),array(11,4),array(11,5),array(12,4),array(12,5),array(13,4),array(13,5),array(14,0),array(14,1),array(14,4),array(14,5),array(15,1),array(15,2),array(15,3),array(15,4),),
'4' => array(array(6,3),array(6,4),array(7,3),array(7,4),array(8,2),array(8,3),array(8,4),array(9,2),array(9,3),array(9,4),array(10,1),array(10,3),array(10,4),array(11,1),array(11,3),array(11,4),array(12,0),array(12,3),array(12,4),array(13,0),array(13,1),array(13,2),array(13,3),array(13,4),array(13,5),array(14,3),array(14,4),array(15,3),array(15,4),),
'5' => array(array(6,1),array(6,2),array(6,3),array(6,4),array(6,5),array(7,1),array(7,2),array(8,0),array(8,1),array(9,0),array(9,1),array(9,2),array(9,3),array(9,4),array(10,0),array(10,1),array(10,4),array(10,5),array(11,4),array(11,5),array(12,4),array(12,5),array(13,4),array(13,5),array(14,0),array(14,1),array(14,4),array(14,5),array(15,1),array(15,2),array(15,3),array(15,4),),
'6' => array(array(6,2),array(6,3),array(6,4),array(7,1),array(7,4),array(7,5),array(8,0),array(8,1),array(9,0),array(9,1),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(11,0),array(11,1),array(11,4),array(11,5),array(12,0),array(12,1),array(12,4),array(12,5),array(13,0),array(13,1),array(13,4),array(13,5),array(14,0),array(14,1),array(14,4),array(14,5),array(15,1),array(15,2),array(15,3),array(15,4),),
'7' => array(array(6,0),array(6,1),array(6,2),array(6,3),array(6,4),array(6,5),array(7,4),array(7,5),array(8,3),array(8,4),array(9,3),array(9,4),array(10,2),array(10,3),array(11,2),array(11,3),array(12,2),array(12,3),array(13,1),array(13,2),array(14,1),array(14,2),array(15,1),array(15,2),),
'9' => array(array(6,1),array(6,2),array(6,3),array(6,4),array(7,0),array(7,1),array(7,4),array(7,5),array(8,0),array(8,1),array(8,4),array(8,5),array(9,0),array(9,1),array(9,4),array(9,5),array(10,0),array(10,1),array(10,4),array(10,5),array(11,1),array(11,2),array(11,3),array(11,4),array(11,5),array(12,4),array(12,5),array(13,4),array(13,5),array(14,0),array(14,1),array(14,4),array(15,1),array(15,2),array(15,3),),
'A' => array(array(6,3),array(6,4),array(6,5),array(7,3),array(7,4),array(7,5),array(8,2),array(8,3),array(8,5),array(8,6),array(9,2),array(9,3),array(9,5),array(9,6),array(10,2),array(10,3),array(10,5),array(10,6),array(11,1),array(11,2),array(11,6),array(11,7),array(12,1),array(12,2),array(12,6),array(12,7),array(13,1),array(13,2),array(13,3),array(13,4),array(13,5),array(13,6),array(13,7),array(14,0),array(14,1),array(14,7),array(14,8),array(15,0),array(15,1),array(15,7),array(15,8),),
'B' => array(array(6,0),array(6,1),array(6,2),array(6,3),array(6,4),array(6,5),array(7,0),array(7,1),array(7,5),array(7,6),array(8,0),array(8,1),array(8,5),array(8,6),array(9,0),array(9,1),array(9,5),array(9,6),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(11,0),array(11,1),array(11,5),array(11,6),array(12,0),array(12,1),array(12,5),array(12,6),array(13,0),array(13,1),array(13,5),array(13,6),array(14,0),array(14,1),array(14,5),array(14,6),array(15,0),array(15,1),array(15,2),array(15,3),array(15,4),array(15,5),),
'G' => array(array(6,2),array(6,3),array(6,4),array(6,5),array(6,6),array(7,1),array(7,2),array(7,6),array(7,7),array(8,0),array(8,1),array(9,0),array(9,1),array(10,0),array(10,1),array(11,0),array(11,1),array(11,4),array(11,5),array(11,6),array(11,7),array(12,0),array(12,1),array(12,6),array(12,7),array(13,0),array(13,1),array(13,6),array(13,7),array(14,1),array(14,2),array(14,6),array(14,7),array(15,2),array(15,3),array(15,4),array(15,5),array(15,6),),
'C' => array(array(6,2),array(6,3),array(6,4),array(6,5),array(6,6),array(7,1),array(7,2),array(7,6),array(7,7),array(8,0),array(8,1),array(9,0),array(9,1),array(10,0),array(10,1),array(11,0),array(11,1),array(12,0),array(12,1),array(13,0),array(13,1),array(14,1),array(14,2),array(14,6),array(14,7),array(15,2),array(15,3),array(15,4),array(15,5),array(15,6),),
'D' =>array(array(6,0),array(6,1),array(6,2),array(6,3),array(6,4),array(7,0),array(7,1),array(7,4),array(7,5),array(8,0),array(8,1),array(8,5),array(8,6),array(9,0),array(9,1),array(9,5),array(9,6),array(10,0),array(10,1),array(10,5),array(10,6),array(11,0),array(11,1),array(11,5),array(11,6),array(12,0),array(12,1),array(12,5),array(12,6),array(13,0),array(13,1),array(13,5),array(13,6),array(14,0),array(14,1),array(14,4),array(14,5),array(15,0),array(15,1),array(15,2),array(15,3),array(15,4),),
'E' => array(array(6,0),array(6,1),array(6,2),array(6,3),array(6,4),array(6,5),array(7,0),array(7,1),array(8,0),array(8,1),array(9,0),array(9,1),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(11,0),array(11,1),array(12,0),array(12,1),array(13,0),array(13,1),array(14,0),array(14,1),array(15,0),array(15,1),array(15,2),array(15,3),array(15,4),array(15,5),),
'H' => array(array(6,0),array(6,1),array(6,5),array(6,6),array(7,0),array(7,1),array(7,5),array(7,6),array(8,0),array(8,1),array(8,5),array(8,6),array(9,0),array(9,1),array(9,5),array(9,6),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(10,6),array(11,0),array(11,1),array(11,5),array(11,6),array(12,0),array(12,1),array(12,5),array(12,6),array(13,0),array(13,1),array(13,5),array(13,6),array(14,0),array(14,1),array(14,5),array(14,6),array(15,0),array(15,1),array(15,5),array(15,6),),
'K' => array(array(6,0),array(6,1),array(6,5),array(6,6),array(7,0),array(7,1),array(7,4),array(7,5),array(8,0),array(8,1),array(8,3),array(8,4),array(9,0),array(9,1),array(9,3),array(9,4),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(11,0),array(11,1),array(11,2),array(11,4),array(11,5),array(12,0),array(12,1),array(12,4),array(12,5),array(13,0),array(13,1),array(13,4),array(13,5),array(14,0),array(14,1),array(14,5),array(14,6),array(15,0),array(15,1),array(15,5),array(15,6),),
'M' => array(array(6,0),array(6,1),array(6,2),array(6,6),array(6,7),array(6,8),array(7,0),array(7,1),array(7,2),array(7,6),array(7,7),array(7,8),array(8,0),array(8,1),array(8,2),array(8,3),array(8,5),array(8,6),array(8,7),array(8,8),array(9,0),array(9,1),array(9,2),array(9,3),array(9,5),array(9,6),array(9,7),array(9,8),array(10,0),array(10,1),array(10,3),array(10,5),array(10,7),array(10,8),array(11,0),array(11,1),array(11,3),array(11,4),array(11,5),array(11,7),array(11,8),array(12,0),array(12,1),array(12,3),array(12,5),array(12,7),array(12,8),array(13,0),array(13,1),array(13,3),array(13,4),array(13,5),array(13,7),array(13,8),array(14,0),array(14,1),array(14,3),array(14,4),array(14,5),array(14,7),array(14,8),array(15,0),array(15,1),array(15,4),array(15,7),array(15,8),),
'N' => array(array(6,0),array(6,1),array(6,5),array(6,6),array(7,0),array(7,1),array(7,2),array(7,5),array(7,6),array(8,0),array(8,1),array(8,2),array(8,5),array(8,6),array(9,0),array(9,1),array(9,2),array(9,3),array(9,5),array(9,6),array(10,0),array(10,1),array(10,3),array(10,5),array(10,6),array(11,0),array(11,1),array(11,3),array(11,4),array(11,5),array(11,6),array(12,0),array(12,1),array(12,4),array(12,5),array(12,6),array(13,0),array(13,1),array(13,4),array(13,5),array(13,6),array(14,0),array(14,1),array(14,5),array(14,6),array(15,0),array(15,1),array(15,5),array(15,6),),
'L' => array(array(6,0),array(6,1),array(7,0),array(7,1),array(8,0),array(8,1),array(9,0),array(9,1),array(10,0),array(10,1),array(11,0),array(11,1),array(12,0),array(12,1),array(13,0),array(13,1),array(14,0),array(14,1),array(15,0),array(15,1),array(15,2),array(15,3),array(15,4),array(15,5),),
'R' => array(array(6,0),array(6,1),array(6,2),array(6,3),array(6,4),array(6,5),array(7,0),array(7,1),array(7,5),array(7,6),array(8,0),array(8,1),array(8,5),array(8,6),array(9,0),array(9,1),array(9,5),array(9,6),array(10,0),array(10,1),array(10,5),array(10,6),array(11,0),array(11,1),array(11,2),array(11,3),array(11,4),array(11,5),array(12,0),array(12,1),array(12,4),array(12,5),array(13,0),array(13,1),array(13,5),array(13,6),array(14,0),array(14,1),array(14,5),array(14,6),array(15,0),array(15,1),array(15,6),array(15,7),),
'P' => array(array(6,0),array(6,1),array(6,2),array(6,3),array(6,4),array(6,5),array(7,0),array(7,1),array(7,5),array(7,6),array(8,0),array(8,1),array(8,5),array(8,6),array(9,0),array(9,1),array(9,5),array(9,6),array(10,0),array(10,1),array(10,5),array(10,6),array(11,0),array(11,1),array(11,2),array(11,3),array(11,4),array(11,5),array(12,0),array(12,1),array(13,0),array(13,1),array(14,0),array(14,1),array(15,0),array(15,1),),
'F' => array(array(6,0),array(6,1),array(6,2),array(6,3),array(6,4),array(6,5),array(7,0),array(7,1),array(8,0),array(8,1),array(9,0),array(9,1),array(10,0),array(10,1),array(11,0),array(11,1),array(11,2),array(11,3),array(11,4),array(11,5),array(12,0),array(12,1),array(13,0),array(13,1),array(14,0),array(14,1),array(15,0),array(15,1),),
'Q' => array(array(6,2),array(6,3),array(6,4),array(6,5),array(7,1),array(7,2),array(7,5),array(7,6),array(8,0),array(8,1),array(8,6),array(8,7),array(9,0),array(9,1),array(9,6),array(9,7),array(10,0),array(10,1),array(10,6),array(10,7),array(11,0),array(11,1),array(11,6),array(11,7),array(12,0),array(12,1),array(12,6),array(12,7),array(13,0),array(13,1),array(13,4),array(13,6),array(13,7),array(14,1),array(14,2),array(14,5),array(14,6),array(15,2),array(15,3),array(15,4),array(15,5),array(15,6),array(16,7),),
'S' => array(array(6,1),array(6,2),array(6,3),array(6,4),array(6,5),array(7,0),array(7,1),array(7,5),array(7,6),array(8,0),array(8,1),array(9,0),array(9,1),array(9,2),array(10,1),array(10,2),array(10,3),array(10,4),array(11,2),array(11,3),array(11,4),array(11,5),array(12,4),array(12,5),array(12,6),array(13,5),array(13,6),array(14,0),array(14,1),array(14,5),array(14,6),array(15,1),array(15,2),array(15,3),array(15,4),array(15,5),),
'T' => array(array(6,0),array(6,1),array(6,2),array(6,3),array(6,4),array(6,5),array(6,6),array(6,7),array(7,3),array(7,4),array(8,3),array(8,4),array(9,3),array(9,4),array(10,3),array(10,4),array(11,3),array(11,4),array(12,3),array(12,4),array(13,3),array(13,4),array(14,3),array(14,4),array(15,3),array(15,4),),
'X' => array(array(6,0),array(6,1),array(6,5),array(6,6),array(7,0),array(7,1),array(7,5),array(7,6),array(8,1),array(8,2),array(8,4),array(8,5),array(9,2),array(9,3),array(9,4),array(10,2),array(10,3),array(10,4),array(11,2),array(11,3),array(11,4),array(12,2),array(12,3),array(12,4),array(13,1),array(13,2),array(13,4),array(13,5),array(14,0),array(14,1),array(14,5),array(14,6),array(15,0),array(15,1),array(15,5),array(15,6),),
'U' => array(array(6,0),array(6,1),array(6,5),array(6,6),array(7,0),array(7,1),array(7,5),array(7,6),array(8,0),array(8,1),array(8,5),array(8,6),array(9,0),array(9,1),array(9,5),array(9,6),array(10,0),array(10,1),array(10,5),array(10,6),array(11,0),array(11,1),array(11,5),array(11,6),array(12,0),array(12,1),array(12,5),array(12,6),array(13,0),array(13,1),array(13,5),array(13,6),array(14,0),array(14,1),array(14,5),array(14,6),array(15,1),array(15,2),array(15,3),array(15,4),array(15,5),),
'V' => array(array(6,0),array(6,1),array(6,7),array(6,8),array(7,0),array(7,1),array(7,7),array(7,8),array(8,1),array(8,2),array(8,6),array(8,7),array(9,1),array(9,2),array(9,6),array(9,7),array(10,1),array(10,2),array(10,6),array(10,7),array(11,2),array(11,3),array(11,5),array(11,6),array(12,2),array(12,3),array(12,5),array(12,6),array(13,2),array(13,3),array(13,5),array(13,6),array(14,3),array(14,4),array(14,5),array(15,3),array(15,4),array(15,5),),
'W' => array(array(6,0),array(6,1),array(6,5),array(6,6),array(6,7),array(6,11),array(6,12),array(7,0),array(7,1),array(7,5),array(7,6),array(7,7),array(7,11),array(7,12),array(8,1),array(8,2),array(8,5),array(8,6),array(8,7),array(8,10),array(8,11),array(9,1),array(9,2),array(9,4),array(9,5),array(9,7),array(9,8),array(9,10),array(9,11),array(10,1),array(10,2),array(10,4),array(10,5),array(10,7),array(10,8),array(10,10),array(10,11),array(11,1),array(11,2),array(11,4),array(11,5),array(11,7),array(11,8),array(11,10),array(11,11),array(12,1),array(12,2),array(12,4),array(12,5),array(12,7),array(12,8),array(12,10),array(12,11),array(13,2),array(13,3),array(13,4),array(13,8),array(13,9),array(13,10),array(14,2),array(14,3),array(14,4),array(14,8),array(14,9),array(14,10),array(15,2),array(15,3),array(15,4),array(15,8),array(15,9),array(15,10),),
'Y' => array(array(6,0),array(6,1),array(6,6),array(6,7),array(7,0),array(7,1),array(7,6),array(7,7),array(8,1),array(8,2),array(8,5),array(8,6),array(9,2),array(9,3),array(9,4),array(9,5),array(10,2),array(10,3),array(10,4),array(10,5),array(11,3),array(11,4),array(12,3),array(12,4),array(13,3),array(13,4),array(14,3),array(14,4),array(15,3),array(15,4),),
'Z' => array(array(6,0),array(6,1),array(6,2),array(6,3),array(6,4),array(6,5),array(6,6),array(7,5),array(7,6),array(8,4),array(8,5),array(9,3),array(9,4),array(10,3),array(10,4),array(11,2),array(11,3),array(12,2),array(12,3),array(13,1),array(13,2),array(14,0),array(14,1),array(15,0),array(15,1),array(15,2),array(15,3),array(15,4),array(15,5),array(15,6),),
'a' => array(array(9,1),array(9,2),array(9,3),array(9,4),array(10,0),array(10,4),array(10,5),array(11,2),array(11,3),array(11,4),array(11,5),array(12,1),array(12,2),array(12,4),array(12,5),array(13,0),array(13,1),array(13,4),array(13,5),array(14,0),array(14,1),array(14,4),array(14,5),array(15,1),array(15,2),array(15,3),array(15,4),array(15,5),),
'b' => array(array(6,0),array(6,1),array(7,0),array(7,1),array(8,0),array(8,1),array(9,0),array(9,1),array(9,3),array(9,4),array(10,0),array(10,1),array(10,2),array(10,4),array(10,5),array(11,0),array(11,1),array(11,4),array(11,5),array(12,0),array(12,1),array(12,4),array(12,5),array(13,0),array(13,1),array(13,4),array(13,5),array(14,0),array(14,1),array(14,2),array(14,4),array(14,5),array(15,0),array(15,1),array(15,3),array(15,4),),
'd' => array(array(6,4),array(6,5),array(7,4),array(7,5),array(8,4),array(8,5),array(9,1),array(9,2),array(9,4),array(9,5),array(10,0),array(10,1),array(10,3),array(10,4),array(10,5),array(11,0),array(11,1),array(11,4),array(11,5),array(12,0),array(12,1),array(12,4),array(12,5),array(13,0),array(13,1),array(13,4),array(13,5),array(14,0),array(14,1),array(14,3),array(14,4),array(14,5),array(15,1),array(15,2),array(15,4),array(15,5),),
'h' => array(array(6,0),array(6,1),array(7,0),array(7,1),array(8,0),array(8,1),array(9,0),array(9,1),array(9,3),array(9,4),array(10,0),array(10,1),array(10,2),array(10,4),array(10,5),array(11,0),array(11,1),array(11,4),array(11,5),array(12,0),array(12,1),array(12,4),array(12,5),array(13,0),array(13,1),array(13,4),array(13,5),array(14,0),array(14,1),array(14,4),array(14,5),array(15,0),array(15,1),array(15,4),array(15,5),),
'g' => array(array(9,1),array(9,2),array(9,4),array(9,5),array(10,0),array(10,1),array(10,3),array(10,4),array(10,5),array(11,0),array(11,1),array(11,4),array(11,5),array(12,0),array(12,1),array(12,4),array(12,5),array(13,0),array(13,1),array(13,4),array(13,5),array(14,0),array(14,1),array(14,3),array(14,4),array(14,5),array(15,1),array(15,2),array(15,4),array(15,5),array(16,4),array(16,5),array(17,0),array(17,4),array(17,5),array(18,1),array(18,2),array(18,3),array(18,4),),
'f' => array(array(6,2),array(6,3),array(6,4),array(7,1),array(7,2),array(8,1),array(8,2),array(9,0),array(9,1),array(9,2),array(9,3),array(10,1),array(10,2),array(11,1),array(11,2),array(12,1),array(12,2),array(13,1),array(13,2),array(14,1),array(14,2),array(15,1),array(15,2),),
'k' => array(array(6,0),array(6,1),array(7,0),array(7,1),array(8,0),array(8,1),array(9,0),array(9,1),array(9,4),array(9,5),array(10,0),array(10,1),array(10,3),array(10,4),array(11,0),array(11,1),array(11,2),array(11,3),array(12,0),array(12,1),array(12,2),array(12,3),array(13,0),array(13,1),array(13,3),array(13,4),array(14,0),array(14,1),array(14,3),array(14,4),array(15,0),array(15,1),array(15,4),array(15,5),),
'm' => array(array(9,0),array(9,1),array(9,3),array(9,4),array(9,5),array(9,7),array(9,8),array(10,0),array(10,1),array(10,2),array(10,4),array(10,5),array(10,6),array(10,8),array(10,9),array(11,0),array(11,1),array(11,4),array(11,5),array(11,8),array(11,9),array(12,0),array(12,1),array(12,4),array(12,5),array(12,8),array(12,9),array(13,0),array(13,1),array(13,4),array(13,5),array(13,8),array(13,9),array(14,0),array(14,1),array(14,4),array(14,5),array(14,8),array(14,9),array(15,0),array(15,1),array(15,4),array(15,5),array(15,8),array(15,9),),
'n' => array(array(9,0),array(9,1),array(9,3),array(9,4),array(10,0),array(10,1),array(10,2),array(10,4),array(10,5),array(11,0),array(11,1),array(11,4),array(11,5),array(12,0),array(12,1),array(12,4),array(12,5),array(13,0),array(13,1),array(13,4),array(13,5),array(14,0),array(14,1),array(14,4),array(14,5),array(15,0),array(15,1),array(15,4),array(15,5),),
'p' => array(array(9,0),array(9,1),array(9,3),array(9,4),array(10,0),array(10,1),array(10,2),array(10,4),array(10,5),array(11,0),array(11,1),array(11,4),array(11,5),array(12,0),array(12,1),array(12,4),array(12,5),array(13,0),array(13,1),array(13,4),array(13,5),array(14,0),array(14,1),array(14,2),array(14,4),array(14,5),array(15,0),array(15,1),array(15,3),array(15,4),array(16,0),array(16,1),array(17,0),array(17,1),array(18,0),array(18,1),),
'q' => array(array(9,1),array(9,2),array(9,4),array(9,5),array(10,0),array(10,1),array(10,3),array(10,4),array(10,5),array(11,0),array(11,1),array(11,4),array(11,5),array(12,0),array(12,1),array(12,4),array(12,5),array(13,0),array(13,1),array(13,4),array(13,5),array(14,0),array(14,1),array(14,3),array(14,4),array(14,5),array(15,1),array(15,2),array(15,4),array(15,5),array(16,4),array(16,5),array(17,4),array(17,5),array(18,4),array(18,5),),
't' => array(array(7,1),array(7,2),array(8,1),array(8,2),array(9,0),array(9,1),array(9,2),array(9,3),array(10,1),array(10,2),array(11,1),array(11,2),array(12,1),array(12,2),array(13,1),array(13,2),array(14,1),array(14,2),array(15,1),array(15,2),array(15,3),),
's' => array(array(9,1),array(9,2),array(9,3),array(9,4),array(10,0),array(10,1),array(10,4),array(10,5),array(11,0),array(11,1),array(11,2),array(12,1),array(12,2),array(12,3),array(12,4),array(13,3),array(13,4),array(13,5),array(14,0),array(14,1),array(14,4),array(14,5),array(15,1),array(15,2),array(15,3),array(15,4),),
'u' => array(array(9,0),array(9,1),array(9,4),array(9,5),array(10,0),array(10,1),array(10,4),array(10,5),array(11,0),array(11,1),array(11,4),array(11,5),array(12,0),array(12,1),array(12,4),array(12,5),array(13,0),array(13,1),array(13,4),array(13,5),array(14,0),array(14,1),array(14,3),array(14,4),array(14,5),array(15,1),array(15,2),array(15,4),array(15,5),),
'r' => array(array(9,0),array(9,1),array(9,2),array(9,3),array(10,0),array(10,1),array(11,0),array(11,1),array(12,0),array(12,1),array(13,0),array(13,1),array(14,0),array(14,1),array(15,0),array(15,1),),
'w' => array(array(9,0),array(9,1),array(9,5),array(9,9),array(9,10),array(10,0),array(10,1),array(10,4),array(10,5),array(10,6),array(10,9),array(10,10),array(11,1),array(11,2),array(11,4),array(11,5),array(11,6),array(11,8),array(11,9),array(12,1),array(12,2),array(12,4),array(12,6),array(12,8),array(12,9),array(13,1),array(13,2),array(13,3),array(13,4),array(13,6),array(13,7),array(13,8),array(13,9),array(14,2),array(14,3),array(14,4),array(14,6),array(14,7),array(14,8),array(15,2),array(15,3),array(15,7),array(15,8),),
'y' => array(array(9,0),array(9,1),array(9,5),array(9,6),array(10,0),array(10,1),array(10,5),array(10,6),array(11,1),array(11,2),array(11,4),array(11,5),array(12,1),array(12,2),array(12,4),array(12,5),array(13,1),array(13,2),array(13,4),array(13,5),array(14,2),array(14,3),array(14,4),array(15,2),array(15,3),array(15,4),array(16,2),array(16,3),array(16,4),array(17,2),array(17,3),array(18,0),array(18,1),array(18,2),array(18,3),),
'v' => array(array(9,0),array(9,1),array(9,5),array(9,6),array(10,0),array(10,1),array(10,5),array(10,6),array(11,1),array(11,2),array(11,4),array(11,5),array(12,1),array(12,2),array(12,4),array(12,5),array(13,1),array(13,2),array(13,4),array(13,5),array(14,2),array(14,3),array(14,4),array(15,2),array(15,3),array(15,4),),
'x' => array(array(9,0),array(9,1),array(9,4),array(9,5),array(10,0),array(10,1),array(10,4),array(10,5),array(11,1),array(11,2),array(11,3),array(11,4),array(12,2),array(12,3),array(13,1),array(13,2),array(13,3),array(13,4),array(14,0),array(14,1),array(14,4),array(14,5),array(15,0),array(15,1),array(15,4),array(15,5),),
'z' => array(array(9,0),array(9,1),array(9,2),array(9,3),array(9,4),array(10,3),array(10,4),array(11,2),array(11,3),array(12,1),array(12,2),array(13,1),array(13,2),array(14,0),array(14,1),array(15,0),array(15,1),array(15,2),array(15,3),array(15,4),),
'e' => array(array(9,1),array(9,2),array(9,3),array(9,4),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(11,0),array(11,1),array(11,4),array(11,5),array(12,0),array(12,1),array(12,2),array(12,3),array(12,4),array(12,5),array(13,0),array(13,1),array(14,0),array(14,1),array(14,2),array(14,3),array(14,4),array(14,5),array(15,1),array(15,2),array(15,3),array(15,4),array(15,5),),
'c' => array(array(9,1),array(9,2),array(9,3),array(9,4),array(10,0),array(10,1),array(10,4),array(10,5),array(11,0),array(11,1),array(12,0),array(12,1),array(13,0),array(13,1),array(14,0),array(14,1),array(14,4),array(14,5),array(15,1),array(15,2),array(15,3),array(15,4),),
);
模糊
$this->keys = array(
'W' => array(array(6,0),array(6,1),array(6,2),array(6,5),array(6,6),array(6,7),array(6,10),array(6,11),array(6,12),array(7,0),array(7,1),array(7,2),array(7,4),array(7,5),array(7,6),array(7,7),array(7,8),array(7,10),array(7,11),array(7,12),array(8,0),array(8,1),array(8,2),array(8,4),array(8,5),array(8,6),array(8,7),array(8,8),array(8,10),array(8,11),array(8,12),array(9,0),array(9,1),array(9,2),array(9,4),array(9,5),array(9,6),array(9,7),array(9,8),array(9,10),array(9,11),array(9,12),array(10,1),array(10,2),array(10,4),array(10,5),array(10,7),array(10,8),array(10,10),array(10,11),array(11,1),array(11,2),array(11,3),array(11,4),array(11,5),array(11,7),array(11,8),array(11,9),array(11,10),array(11,11),array(12,1),array(12,2),array(12,3),array(12,4),array(12,5),array(12,7),array(12,8),array(12,9),array(12,10),array(12,11),array(13,1),array(13,2),array(13,3),array(13,4),array(13,5),array(13,7),array(13,8),array(13,9),array(13,10),array(13,11),array(14,1),array(14,2),array(14,3),array(14,4),array(14,8),array(14,9),array(14,10),array(14,11),array(15,2),array(15,3),array(15,4),array(15,8),array(15,9),array(15,10),),
'y' => array(array(9,0),array(9,1),array(9,2),array(9,4),array(9,5),array(9,6),array(10,0),array(10,1),array(10,2),array(10,4),array(10,5),array(10,6),array(11,0),array(11,1),array(11,2),array(11,4),array(11,5),array(11,6),array(12,1),array(12,2),array(12,3),array(12,4),array(12,5),array(13,1),array(13,2),array(13,3),array(13,4),array(13,5),array(14,1),array(14,2),array(14,3),array(14,4),array(14,5),array(15,2),array(15,3),array(15,4),array(15,5),array(16,2),array(16,3),array(16,4),array(17,1),array(17,2),array(17,3),array(17,4),array(18,0),array(18,1),array(18,2),array(18,3),),
'p' => array(array(9,0),array(9,1),array(9,2),array(9,3),array(9,4),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(11,0),array(11,1),array(11,4),array(11,5),array(12,0),array(12,1),array(12,4),array(12,5),array(13,0),array(13,1),array(13,4),array(13,5),array(14,0),array(14,1),array(14,2),array(14,3),array(14,4),array(14,5),array(15,0),array(15,1),array(15,2),array(15,3),array(15,4),array(16,0),array(16,1),array(17,0),array(17,1),array(18,0),array(18,1),),
'D' => array(array(6,0),array(6,1),array(6,2),array(6,3),array(6,4),array(6,5),array(7,0),array(7,1),array(7,4),array(7,5),array(7,6),array(8,0),array(8,1),array(8,4),array(8,5),array(8,6),array(9,0),array(9,1),array(9,5),array(9,6),array(10,0),array(10,1),array(10,5),array(10,6),array(11,0),array(11,1),array(11,5),array(11,6),array(12,0),array(12,1),array(12,5),array(12,6),array(13,0),array(13,1),array(13,4),array(13,5),array(13,6),array(14,0),array(14,1),array(14,4),array(14,5),array(14,6),array(15,0),array(15,1),array(15,2),array(15,3),array(15,4),array(15,5),),
'B' => array(array(6,0),array(6,1),array(6,2),array(6,3),array(6,4),array(6,5),array(6,6),array(7,0),array(7,1),array(7,4),array(7,5),array(7,6),array(8,0),array(8,1),array(8,5),array(8,6),array(9,0),array(9,1),array(9,4),array(9,5),array(9,6),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(10,6),array(11,0),array(11,1),array(11,4),array(11,5),array(11,6),array(12,0),array(12,1),array(12,5),array(12,6),array(13,0),array(13,1),array(13,5),array(13,6),array(14,0),array(14,1),array(14,4),array(14,5),array(14,6),array(15,0),array(15,1),array(15,2),array(15,3),array(15,4),array(15,5),),
'U' => array(array(6,0),array(6,1),array(6,5),array(6,6),array(7,0),array(7,1),array(7,5),array(7,6),array(8,0),array(8,1),array(8,5),array(8,6),array(9,0),array(9,1),array(9,5),array(9,6),array(10,0),array(10,1),array(10,5),array(10,6),array(11,0),array(11,1),array(11,5),array(11,6),array(12,0),array(12,1),array(12,5),array(12,6),array(13,0),array(13,1),array(13,5),array(13,6),array(14,0),array(14,1),array(14,2),array(14,4),array(14,5),array(14,6),array(15,1),array(15,2),array(15,3),array(15,4),array(15,5),),
'b' => array(array(6,0),array(6,1),array(7,0),array(7,1),array(8,0),array(8,1),array(9,0),array(9,1),array(9,2),array(9,3),array(9,4),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(11,0),array(11,1),array(11,4),array(11,5),array(12,0),array(12,1),array(12,4),array(12,5),array(13,0),array(13,1),array(13,4),array(13,5),array(14,0),array(14,1),array(14,2),array(14,3),array(14,4),array(14,5),array(15,0),array(15,1),array(15,2),array(15,3),array(15,4),),
'a' => array(array(9,0),array(9,1),array(9,2),array(9,3),array(9,4),array(9,5),array(10,0),array(10,1),array(10,3),array(10,4),array(10,5),array(11,1),array(11,2),array(11,3),array(11,4),array(11,5),array(12,0),array(12,1),array(12,2),array(12,3),array(12,4),array(12,5),array(13,0),array(13,1),array(13,4),array(13,5),array(14,0),array(14,1),array(14,2),array(14,3),array(14,4),array(14,5),array(15,0),array(15,1),array(15,2),array(15,3),array(15,4),array(15,5),),
'C' => array(array(6,2),array(6,3),array(6,4),array(6,5),array(6,6),array(7,1),array(7,2),array(7,3),array(7,5),array(7,6),array(7,7),array(8,0),array(8,1),array(8,2),array(9,0),array(9,1),array(10,0),array(10,1),array(11,0),array(11,1),array(12,0),array(12,1),array(13,0),array(13,1),array(13,2),array(14,0),array(14,1),array(14,2),array(14,3),array(14,5),array(14,6),array(14,7),array(15,1),array(15,2),array(15,3),array(15,4),array(15,5),array(15,6),),
'A' => array(array(6,3),array(6,4),array(6,5),array(7,2),array(7,3),array(7,4),array(7,5),array(7,6),array(8,2),array(8,3),array(8,4),array(8,5),array(8,6),array(9,2),array(9,3),array(9,4),array(9,5),array(9,6),array(10,1),array(10,2),array(10,3),array(10,5),array(10,6),array(10,7),array(11,1),array(11,2),array(11,3),array(11,5),array(11,6),array(11,7),array(12,1),array(12,2),array(12,3),array(12,5),array(12,6),array(12,7),array(13,0),array(13,1),array(13,2),array(13,3),array(13,4),array(13,5),array(13,6),array(13,7),array(13,8),array(14,0),array(14,1),array(14,2),array(14,6),array(14,7),array(14,8),array(15,0),array(15,1),array(15,2),array(15,6),array(15,7),array(15,8),),
'Z' => array(array(6,0),array(6,1),array(6,2),array(6,3),array(6,4),array(6,5),array(6,6),array(7,4),array(7,5),array(7,6),array(8,4),array(8,5),array(8,6),array(9,3),array(9,4),array(9,5),array(10,2),array(10,3),array(10,4),array(11,2),array(11,3),array(11,4),array(12,1),array(12,2),array(12,3),array(13,0),array(13,1),array(13,2),array(13,3),array(14,0),array(14,1),array(14,2),array(15,0),array(15,1),array(15,2),array(15,3),array(15,4),array(15,5),array(15,6),),
'm' => array(array(9,0),array(9,1),array(9,2),array(9,3),array(9,4),array(9,5),array(9,6),array(9,7),array(9,8),array(9,9),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(10,6),array(10,7),array(10,8),array(10,9),array(11,0),array(11,1),array(11,4),array(11,5),array(11,8),array(11,9),array(12,0),array(12,1),array(12,4),array(12,5),array(12,8),array(12,9),array(13,0),array(13,1),array(13,4),array(13,5),array(13,8),array(13,9),array(14,0),array(14,1),array(14,4),array(14,5),array(14,8),array(14,9),array(15,0),array(15,1),array(15,4),array(15,5),array(15,8),array(15,9),),
'2' => array(array(6,0),array(7,0),array(13,0),array(14,0),array(15,0),array(6,1),array(7,1),array(12,1),array(13,1),array(14,1),array(15,1),array(6,2),array(7,2),array(11,2),array(12,2),array(13,2),array(14,2),array(15,2),array(6,3),array(7,3),array(9,3),array(10,3),array(11,3),array(12,3),array(13,3),array(15,3),array(6,4),array(7,4),array(8,4),array(9,4),array(10,4),array(11,4),array(12,4),array(15,4),array(7,5),array(8,5),array(9,5),array(10,5),array(15,5)),
'6' => array(array(6,1),array(6,2),array(6,3),array(6,4),array(6,5),array(7,0),array(7,1),array(7,2),array(7,3),array(7,4),array(7,5),array(8,0),array(8,1),array(9,0),array(9,1),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(11,0),array(11,1),array(11,2),array(11,3),array(11,4),array(11,5),array(12,0),array(12,1),array(12,4),array(12,5),array(13,0),array(13,1),array(13,4),array(13,5),array(14,0),array(14,1),array(14,2),array(14,3),array(14,4),array(14,5),array(15,1),array(15,2),array(15,3),array(15,4),),
's' => array(array(9,0),array(9,1),array(9,2),array(9,3),array(9,4),array(9,5),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(11,0),array(11,1),array(11,2),array(11,3),array(11,4),array(12,0),array(12,1),array(12,2),array(12,3),array(12,4),array(12,5),array(13,2),array(13,3),array(13,4),array(13,5),array(14,0),array(14,1),array(14,2),array(14,3),array(14,4),array(14,5),array(15,0),array(15,1),array(15,2),array(15,3),array(15,4),array(15,5),),
'w' => array(array(9,0),array(9,1),array(9,2),array(9,4),array(9,5),array(9,6),array(9,9),array(9,10),array(10,0),array(10,1),array(10,2),array(10,4),array(10,5),array(10,6),array(10,8),array(10,9),array(10,10),array(11,0),array(11,1),array(11,2),array(11,4),array(11,5),array(11,6),array(11,8),array(11,9),array(11,10),array(12,1),array(12,2),array(12,3),array(12,4),array(12,5),array(12,6),array(12,7),array(12,8),array(12,9),array(13,1),array(13,2),array(13,3),array(13,4),array(13,6),array(13,7),array(13,8),array(13,9),array(14,1),array(14,2),array(14,3),array(14,4),array(14,6),array(14,7),array(14,8),array(14,9),array(15,2),array(15,3),array(15,4),array(15,6),array(15,7),array(15,8),),
'7' => array(array(6,0),array(6,1),array(11,1),array(12,1),array(13,1),array(14,1),array(6,2),array(9,2),array(10,2),array(11,2),array(12,2),array(13,2),array(14,2),array(15,2),array(6,3),array(7,3),array(8,3),array(9,3),array(10,3),array(11,3),array(12,3),array(13,3),array(14,3),array(6,4),array(7,4),array(8,4),array(9,4),array(10,4),array(6,5),array(7,5),array(8,5),array(15,1),),
'N' => array(array(6,0),array(6,1),array(6,2),array(6,5),array(6,6),array(7,0),array(7,1),array(7,2),array(7,5),array(7,6),array(8,0),array(8,1),array(8,2),array(8,3),array(8,5),array(8,6),array(9,0),array(9,1),array(9,2),array(9,3),array(9,5),array(9,6),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(10,6),array(11,0),array(11,1),array(11,2),array(11,3),array(11,4),array(11,5),array(11,6),array(12,0),array(12,1),array(12,3),array(12,4),array(12,5),array(12,6),array(13,0),array(13,1),array(13,4),array(13,5),array(13,6),array(14,0),array(14,1),array(14,4),array(14,5),array(14,6),array(15,0),array(15,1),array(15,5),array(15,6),),
'H' => array(array(6,0),array(6,1),array(6,5),array(6,6),array(7,0),array(7,1),array(7,5),array(7,6),array(8,0),array(8,1),array(8,5),array(8,6),array(9,0),array(9,1),array(9,5),array(9,6),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(10,6),array(11,0),array(11,1),array(11,5),array(11,6),array(12,0),array(12,1),array(12,5),array(12,6),array(13,0),array(13,1),array(13,5),array(13,6),array(14,0),array(14,1),array(14,5),array(14,6),array(15,0),array(15,1),array(15,5),array(15,6),),
'v' => array(array(9,0),array(9,1),array(9,5),array(9,6),array(10,0),array(10,1),array(10,2),array(10,4),array(10,5),array(10,6),array(11,0),array(11,1),array(11,2),array(11,4),array(11,5),array(11,6),array(12,1),array(12,2),array(12,3),array(12,4),array(12,5),array(13,1),array(13,2),array(13,3),array(13,4),array(13,5),array(14,2),array(14,3),array(14,4),array(15,2),array(15,3),array(15,4),),
'K' => array(array(6,0),array(6,1),array(6,5),array(6,6),array(6,7),array(7,0),array(7,1),array(7,4),array(7,5),array(7,6),array(8,0),array(8,1),array(8,3),array(8,4),array(8,5),array(9,0),array(9,1),array(9,2),array(9,3),array(9,4),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(11,0),array(11,1),array(11,2),array(11,3),array(11,4),array(11,5),array(12,0),array(12,1),array(12,2),array(12,4),array(12,5),array(13,0),array(13,1),array(13,4),array(13,5),array(13,6),array(14,0),array(14,1),array(14,4),array(14,5),array(14,6),array(15,0),array(15,1),array(15,5),array(15,6),array(15,7),),
'G' => array(array(6,2),array(6,3),array(6,4),array(6,5),array(6,6),array(7,1),array(7,2),array(7,3),array(7,5),array(7,6),array(7,7),array(8,0),array(8,1),array(8,2),array(9,0),array(9,1),array(10,0),array(10,1),array(11,0),array(11,1),array(11,4),array(11,5),array(11,6),array(11,7),array(12,0),array(12,1),array(12,2),array(12,6),array(12,7),array(13,0),array(13,1),array(13,2),array(13,6),array(13,7),array(14,1),array(14,2),array(14,3),array(14,5),array(14,6),array(14,7),array(15,2),array(15,3),array(15,4),array(15,5),array(15,6),array(15,7),),
'Y' => array(array(6,0),array(6,1),array(6,6),array(6,7),array(7,0),array(7,1),array(7,2),array(7,5),array(7,6),array(7,7),array(8,1),array(8,2),array(8,3),array(8,4),array(8,5),array(8,6),array(9,1),array(9,2),array(9,3),array(9,4),array(9,5),array(9,6),array(10,2),array(10,3),array(10,4),array(10,5),array(11,2),array(11,3),array(11,4),array(11,5),array(12,3),array(12,4),array(13,3),array(13,4),array(14,3),array(14,4),array(15,3),array(15,4),),
'8' =>array(array(6,0),array(6,1),array(6,2),array(6,3),array(6,4),array(6,5),array(7,0),array(7,1),array(7,2),array(7,3),array(7,4),array(7,5),array(8,0),array(8,1),array(8,4),array(8,5),array(9,0),array(9,1),array(9,2),array(9,3),array(9,4),array(9,5),array(10,1),array(10,2),array(10,3),array(10,4),array(11,0),array(11,1),array(11,2),array(11,3),array(11,4),array(11,5),array(12,0),array(12,1),array(12,4),array(12,5),array(13,0),array(13,1),array(13,4),array(13,5),array(14,0),array(14,1),array(14,2),array(14,3),array(14,4),array(14,5),array(15,1),array(15,2),array(15,3),array(15,4),),
'9' => array(array(6,1),array(6,2),array(6,3),array(6,4),array(7,0),array(7,1),array(7,2),array(7,3),array(7,4),array(7,5),array(8,0),array(8,1),array(8,4),array(8,5),array(9,0),array(9,1),array(9,4),array(9,5),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(11,1),array(11,2),array(11,3),array(11,4),array(11,5),array(12,4),array(12,5),array(13,4),array(13,5),array(14,0),array(14,1),array(14,2),array(14,3),array(14,4),array(14,5),array(15,0),array(15,1),array(15,2),array(15,3),array(15,4),),
'3' => array(array(6,0),array(6,1),array(6,2),array(6,3),array(6,4),array(7,0),array(7,1),array(7,2),array(7,3),array(7,4),array(7,5),array(8,4),array(8,5),array(9,3),array(9,4),array(9,5),array(10,2),array(10,3),array(10,4),array(11,3),array(11,4),array(11,5),array(12,4),array(12,5),array(13,4),array(13,5),array(14,0),array(14,1),array(14,2),array(14,3),array(14,4),array(14,5),array(15,0),array(15,1),array(15,2),array(15,3),array(15,4),),
'g' => array(array(9,1),array(9,2),array(9,3),array(9,4),array(9,5),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(11,0),array(11,1),array(11,4),array(11,5),array(12,0),array(12,1),array(12,4),array(12,5),array(13,0),array(13,1),array(13,4),array(13,5),array(14,0),array(14,1),array(14,2),array(14,3),array(14,4),array(14,5),array(15,1),array(15,2),array(15,3),array(15,4),array(15,5),array(16,4),array(16,5),array(17,0),array(17,1),array(17,3),array(17,4),array(17,5),array(18,0),array(18,1),array(18,2),array(18,3),array(18,4),array(18,5),),
'd' => array(array(6,4),array(6,5),array(7,4),array(7,5),array(8,4),array(8,5),array(9,1),array(9,2),array(9,3),array(9,4),array(9,5),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(11,0),array(11,1),array(11,4),array(11,5),array(12,0),array(12,1),array(12,4),array(12,5),array(13,0),array(13,1),array(13,4),array(13,5),array(14,0),array(14,1),array(14,2),array(14,3),array(14,4),array(14,5),array(15,1),array(15,2),array(15,3),array(15,4),array(15,5),),
't' => array(array(7,1),array(7,2),array(8,1),array(8,2),array(9,0),array(9,1),array(9,2),array(9,3),array(10,1),array(10,2),array(11,1),array(11,2),array(12,1),array(12,2),array(13,1),array(13,2),array(14,1),array(14,2),array(15,1),array(15,2),array(15,3),),
'e' => array(array(9,1),array(9,2),array(9,3),array(9,4),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(11,0),array(11,1),array(11,4),array(11,5),array(12,0),array(12,1),array(12,2),array(12,3),array(12,4),array(12,5),array(13,0),array(13,1),array(14,0),array(14,1),array(14,2),array(14,3),array(14,4),array(14,5),array(15,1),array(15,2),array(15,3),array(15,4),array(15,5),),
'V' => array(array(6,0),array(6,1),array(6,2),array(6,6),array(6,7),array(6,8),array(7,0),array(7,1),array(7,2),array(7,6),array(7,7),array(7,8),array(8,0),array(8,1),array(8,2),array(8,6),array(8,7),array(8,8),array(9,1),array(9,2),array(9,3),array(9,5),array(9,6),array(9,7),array(10,1),array(10,2),array(10,3),array(10,5),array(10,6),array(10,7),array(11,1),array(11,2),array(11,3),array(11,5),array(11,6),array(11,7),array(12,2),array(12,3),array(12,4),array(12,5),array(12,6),array(13,2),array(13,3),array(13,4),array(13,5),array(13,6),array(14,2),array(14,3),array(14,4),array(14,5),array(14,6),array(15,3),array(15,4),array(15,5),),
'x' => array(array(9,0),array(9,1),array(9,2),array(9,5),array(9,6),array(9,7),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(10,6),array(11,2),array(11,3),array(11,4),array(11,5),array(12,2),array(12,3),array(12,4),array(12,5),array(13,2),array(13,3),array(13,4),array(13,5),array(14,1),array(14,2),array(14,3),array(14,4),array(14,5),array(14,6),array(15,0),array(15,1),array(15,2),array(15,5),array(15,6),array(15,7),),
'q' => array(array(9,1),array(9,2),array(9,3),array(9,4),array(9,5),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(11,0),array(11,1),array(11,4),array(11,5),array(12,0),array(12,1),array(12,4),array(12,5),array(13,0),array(13,1),array(13,4),array(13,5),array(14,0),array(14,1),array(14,2),array(14,3),array(14,4),array(14,5),array(15,1),array(15,2),array(15,3),array(15,4),array(15,5),array(16,4),array(16,5),array(17,4),array(17,5),array(18,4),array(18,5),),
'T' => array(array(6,0),array(6,1),array(6,2),array(6,3),array(6,4),array(6,5),array(6,6),array(6,7),array(7,3),array(7,4),array(8,3),array(8,4),array(9,3),array(9,4),array(10,3),array(10,4),array(11,3),array(11,4),array(12,3),array(12,4),array(13,3),array(13,4),array(14,3),array(14,4),array(15,3),array(15,4),),
'5' => array(array(6,0),array(6,1),array(6,2),array(6,3),array(6,4),array(6,5),array(7,0),array(7,1),array(7,2),array(8,0),array(8,1),array(8,2),array(9,0),array(9,1),array(9,2),array(9,3),array(9,4),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(11,4),array(11,5),array(12,4),array(12,5),array(13,4),array(13,5),array(14,0),array(14,1),array(14,2),array(14,3),array(14,4),array(14,5),array(15,0),array(15,1),array(15,2),array(15,3),array(15,4),),
'k' => array(array(6,0),array(6,1),array(7,0),array(7,1),array(8,0),array(8,1),array(9,0),array(9,1),array(9,3),array(9,4),array(9,5),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(11,0),array(11,1),array(11,2),array(11,3),array(12,0),array(12,1),array(12,2),array(12,3),array(12,4),array(13,0),array(13,1),array(13,2),array(13,3),array(13,4),array(14,0),array(14,1),array(14,3),array(14,4),array(14,5),array(15,0),array(15,1),array(15,4),array(15,5),),
'R' => array(array(6,0),array(6,1),array(6,2),array(6,3),array(6,4),array(6,5),array(6,6),array(7,0),array(7,1),array(7,4),array(7,5),array(7,6),array(8,0),array(8,1),array(8,5),array(8,6),array(9,0),array(9,1),array(9,5),array(9,6),array(10,0),array(10,1),array(10,4),array(10,5),array(10,6),array(11,0),array(11,1),array(11,2),array(11,3),array(11,4),array(11,5),array(12,0),array(12,1),array(12,3),array(12,4),array(12,5),array(13,0),array(13,1),array(13,4),array(13,5),array(13,6),array(14,0),array(14,1),array(14,5),array(14,6),array(14,7),array(15,0),array(15,1),array(15,5),array(15,6),array(15,7),),
'4' => array(array(6,3),array(6,4),array(7,2),array(7,3),array(7,4),array(8,2),array(8,3),array(8,4),array(9,1),array(9,2),array(9,3),array(9,4),array(10,1),array(10,2),array(10,3),array(10,4),array(11,0),array(11,1),array(11,3),array(11,4),array(12,0),array(12,1),array(12,3),array(12,4),array(13,0),array(13,1),array(13,2),array(13,3),array(13,4),array(13,5),array(14,3),array(14,4),array(15,3),array(15,4),),
'S' => array(array(6,1),array(6,2),array(6,3),array(6,4),array(6,5),array(6,6),array(7,0),array(7,1),array(7,2),array(7,4),array(7,5),array(7,6),array(8,0),array(8,1),array(8,2),array(9,0),array(9,1),array(9,2),array(9,3),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(11,1),array(11,2),array(11,3),array(11,4),array(11,5),array(11,6),array(12,3),array(12,4),array(12,5),array(12,6),array(13,4),array(13,5),array(13,6),array(14,0),array(14,1),array(14,2),array(14,4),array(14,5),array(14,6),array(15,0),array(15,1),array(15,2),array(15,3),array(15,4),array(15,5),),
'M' => array(array(6,0),array(6,1),array(6,2),array(6,6),array(6,7),array(6,8),array(7,0),array(7,1),array(7,2),array(7,3),array(7,5),array(7,6),array(7,7),array(7,8),array(8,0),array(8,1),array(8,2),array(8,3),array(8,5),array(8,6),array(8,7),array(8,8),array(9,0),array(9,1),array(9,2),array(9,3),array(9,5),array(9,6),array(9,7),array(9,8),array(10,0),array(10,1),array(10,2),array(10,3),array(10,5),array(10,6),array(10,7),array(10,8),array(11,0),array(11,1),array(11,2),array(11,3),array(11,4),array(11,5),array(11,6),array(11,7),array(11,8),array(12,0),array(12,1),array(12,2),array(12,3),array(12,4),array(12,5),array(12,6),array(12,7),array(12,8),array(13,0),array(13,1),array(13,3),array(13,4),array(13,5),array(13,7),array(13,8),array(14,0),array(14,1),array(14,3),array(14,4),array(14,5),array(14,7),array(14,8),array(15,0),array(15,1),array(15,3),array(15,4),array(15,5),array(15,7),array(15,8),),
'E' => array(array(6,0),array(6,1),array(6,2),array(6,3),array(6,4),array(6,5),array(7,0),array(7,1),array(8,0),array(8,1),array(9,0),array(9,1),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(11,0),array(11,1),array(12,0),array(12,1),array(13,0),array(13,1),array(14,0),array(14,1),array(15,0),array(15,1),array(15,2),array(15,3),array(15,4),array(15,5),),
'X' => array(array(6,0),array(6,1),array(6,2),array(6,6),array(6,7),array(6,8),array(7,1),array(7,2),array(7,3),array(7,5),array(7,6),array(7,7),array(8,1),array(8,2),array(8,3),array(8,4),array(8,5),array(8,6),array(8,7),array(9,2),array(9,3),array(9,4),array(9,5),array(9,6),array(10,3),array(10,4),array(10,5),array(11,3),array(11,4),array(11,5),array(12,2),array(12,3),array(12,4),array(12,5),array(12,6),array(13,1),array(13,2),array(13,3),array(13,4),array(13,5),array(13,6),array(13,7),array(14,1),array(14,2),array(14,3),array(14,5),array(14,6),array(14,7),array(15,0),array(15,1),array(15,2),array(15,6),array(15,7),array(15,8),),
'Q' => array(array(6,1),array(6,2),array(6,3),array(6,4),array(6,5),array(6,6),array(7,0),array(7,1),array(7,2),array(7,3),array(7,4),array(7,5),array(7,6),array(8,0),array(8,1),array(8,2),array(8,5),array(8,6),array(8,7),array(9,0),array(9,1),array(9,6),array(9,7),array(10,0),array(10,1),array(10,6),array(10,7),array(11,0),array(11,1),array(11,6),array(11,7),array(12,0),array(12,1),array(12,2),array(12,6),array(12,7),array(13,0),array(13,1),array(13,2),array(13,4),array(13,5),array(13,6),array(13,7),array(14,0),array(14,1),array(14,2),array(14,3),array(14,4),array(14,5),array(14,6),array(14,7),array(15,1),array(15,2),array(15,3),array(15,4),array(15,5),array(15,6),array(15,7),array(16,6),array(16,7),),
'f' => array(array(6,1),array(6,2),array(6,3),array(7,1),array(7,2),array(8,1),array(8,2),array(9,0),array(9,1),array(9,2),array(9,3),array(10,1),array(10,2),array(11,1),array(11,2),array(12,1),array(12,2),array(13,1),array(13,2),array(14,1),array(14,2),array(15,1),array(15,2),),
'P' =>array(array(6,0),array(6,1),array(6,2),array(6,3),array(6,4),array(6,5),array(6,6),array(7,0),array(7,1),array(7,4),array(7,5),array(7,6),array(8,0),array(8,1),array(8,5),array(8,6),array(9,0),array(9,1),array(9,5),array(9,6),array(10,0),array(10,1),array(10,4),array(10,5),array(10,6),array(11,0),array(11,1),array(11,2),array(11,3),array(11,4),array(11,5),array(12,0),array(12,1),array(13,0),array(13,1),array(14,0),array(14,1),array(15,0),array(15,1),),
'F' => array(array(6,0),array(6,1),array(6,2),array(6,3),array(6,4),array(6,5),array(7,0),array(7,1),array(8,0),array(8,1),array(9,0),array(9,1),array(10,0),array(10,1),array(11,0),array(11,1),array(11,2),array(11,3),array(11,4),array(11,5),array(12,0),array(12,1),array(13,0),array(13,1),array(14,0),array(14,1),array(15,0),array(15,1),),
'z' => array(array(9,0),array(9,1),array(9,2),array(9,3),array(9,4),array(10,2),array(10,3),array(10,4),array(11,2),array(11,3),array(11,4),array(12,1),array(12,2),array(12,3),array(13,0),array(13,1),array(13,2),array(14,0),array(14,1),array(14,2),array(15,0),array(15,1),array(15,2),array(15,3),array(15,4),),
'u' => array(array(9,0),array(9,1),array(9,4),array(9,5),array(10,0),array(10,1),array(10,4),array(10,5),array(11,0),array(11,1),array(11,4),array(11,5),array(12,0),array(12,1),array(12,4),array(12,5),array(13,0),array(13,1),array(13,4),array(13,5),array(14,0),array(14,1),array(14,2),array(14,3),array(14,4),array(14,5),array(15,0),array(15,1),array(15,2),array(15,3),array(15,4),array(15,5),),
'h' => array(array(6,0),array(6,1),array(7,0),array(7,1),array(8,0),array(8,1),array(9,0),array(9,1),array(9,2),array(9,3),array(9,4),array(9,5),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(11,0),array(11,1),array(11,4),array(11,5),array(12,0),array(12,1),array(12,4),array(12,5),array(13,0),array(13,1),array(13,4),array(13,5),array(14,0),array(14,1),array(14,4),array(14,5),array(15,0),array(15,1),array(15,4),array(15,5),),
'c' => array(array(9,1),array(9,2),array(9,3),array(9,4),array(9,5),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(11,0),array(11,1),array(12,0),array(12,1),array(13,0),array(13,1),array(14,0),array(14,1),array(14,2),array(14,3),array(14,4),array(14,5),array(15,1),array(15,2),array(15,3),array(15,4),array(15,5),),
't' => array(array(7,1),array(7,2),array(8,1),array(8,2),array(9,0),array(9,1),array(9,2),array(9,3),array(10,1),array(10,2),array(11,1),array(11,2),array(12,1),array(12,2),array(13,1),array(13,2),array(14,1),array(14,2),array(15,1),array(15,2),array(15,3),),
'n' => array(array(9,0),array(9,1),array(9,2),array(9,3),array(9,4),array(9,5),array(10,0),array(10,1),array(10,2),array(10,3),array(10,4),array(10,5),array(11,0),array(11,1),array(11,4),array(11,5),array(12,0),array(12,1),array(12,4),array(12,5),array(13,0),array(13,1),array(13,4),array(13,5),array(14,0),array(14,1),array(14,4),array(14,5),array(15,0),array(15,1),array(15,4),array(15,5),),
'L' => array(array(6,0),array(6,1),array(7,0),array(7,1),array(8,0),array(8,1),array(9,0),array(9,1),array(10,0),array(10,1),array(11,0),array(11,1),array(12,0),array(12,1),array(13,0),array(13,1),array(14,0),array(14,1),array(15,0),array(15,1),array(15,2),array(15,3),array(15,4),array(15,5),),
'r' => array(array(9,0),array(9,1),array(9,2),array(9,3),array(10,0),array(10,1),array(10,2),array(10,3),array(11,0),array(11,1),array(12,0),array(12,1),array(13,0),array(13,1),array(14,0),array(14,1),array(15,0),array(15,1),),