php爱好者专刊中二维码的解释
PHP爱好者
1. 完成google开放API
[php]
$urlToEncode="姓名:刘新明,电话:18792448443";
生成 QRfromGoogle($urlToEncode);
/**
*Google API二维码生成【QRcode最多可存储4296个字母数字文本,详情请查看二维码数据格式】
*@paramstring$chl 二维码包含的信息可以是数字、字符、补码信息、汉字。数据类型不能混合,数据必须采用UTF-8URL编码。 如果要传输的信息超过2K字节,请使用POST方法
*@paramint$widhtHeight 生成二维码规格设置
*@paramstring$EC_level是可选的纠错级别,二维码支持四个级别的纠错,分别用于恢复丢失、误读、模糊、数据。
*L-默认:可以识别 7% 的丢失数据
*M - 可以识别丢失15%的数据
*Q-可以识别丢失25%的数据
*H - 可以识别丢失30%的数据
*@paramint$margin @paramint$margin生成的二维码与图片边框的距离
*/
functiongenerateQRfromGoogle($chl,$widhtHeight='150',$EC_level='L',$margin='0')
$chl=urlencode($chl);
回声'
'.$widhtHeight.'x'.$widhtHeight.'&cht=qr&chld='.$EC_level.'|'.$margin.'&chl='.$chl.'"alt="QRcode"widhtHeight="'.$ wdhtHeight.'"widhtHeight="'.$widhtHeight.'"/>';
更多详情请参考百度文库:
2. PHP解释器PHPQRCode
PHPQRCode是用于生成QRCode的开源(LGPL)库,
二维条形码。基于libqrencodeClibrary,
提供用于创建 QRCode 条形码图像(PNG、JPEG 感谢 GD2)的 API。
纯粹用 PHP 实现,没有外部依赖项(如果需要php 生成条形码,GD2 除外)。
PS:由于时间限制,我只测试了google open API正常。 其他的可以自己测试一下。
=================================================== =了解接下来两个二维码的原理========================================= ===============
二维条码(2-Dimensional Barcode)是按照一定规则分布在平面上的具有特定几何图案的黑白图案,用于记录数据和信息。
常用的编码系统有:DataMatrix、MaxiCode、Aztec、QRCode、Vericode、PDF417、Ultracode、Code49、Code16K等。
①:堆叠/逐行二维条码,如Code16K、Code49、PDF417(如右图)等。
②:矩阵二维码,最流行的是QRCODE
二维码存储的数据量较大; 可以包含数字、字符、英文文本等混合内容; 具有一定的容错能力(部分损坏后仍能正常读取); 并且空间利用率高。
③:二维码简介
二维码的基本结构如上图所示,其中:
位置检测图形、位置检测图形分隔符、定位图形:用于对二维码进行定位。 对于每个二维码,位置是固定的,但大小会有所不同;
标定图形:尺寸确定,标定图形的数量和位置也确定;
格式信息:表示QR码的纠错级别php 生成条形码,分为L、M、Q、H;
版本信息:二维码的大小。 QR 码符号具有 40 种尺寸(通常为深棕色)的矩阵,从 21x21(版本 1)到 177x177(版本 40)。 每个版本的符号都比之前的版本大,每侧降低了 4 个模块。
数据和纠错码字:实际保存的二维码信息,以及纠错码字(用于纠正因二维码破坏而产生的错误)。
简要编码过程:
1、数据分析:确定会员代码的字符类型,并根据对应的字符集转换为符号字符; 选择纠错级别,在一定大小的情况下,纠错级别越高,实际数据容量越小。
2、数据编码:将数据字符转换为比特流,每个8位码字整体构成一个数据码字序列。虽然知道了数据码字序列,但你却知道了二维码的数据内容
可以根据更高效解码的模式对数据进行编码,例如:编码数据:01234567(版本1-H),
1)集团:01234567
2)转换为二进制补码:012→0000001100
345→0101011001
67→1000011
3)转换为序列:000000110001010110011000011
4)将字符个数转换为二进制补码:8→0000001000
5)加入模式指示符(上图中的数字)0001:00010000001000000000110001010110011000011
对于字母、中文、日文等,只是分组的形式和方式不同,基本技术是一样的
3、纠错编码:将前面的码字序列按要求分成块,根据纠错级别和分块码字组成纠错码字,将纠错码字添加到数据码字序列的前面,成为新序列。
当二维码的大小和纠错级别确定后,虽然其能容纳的码字总数和纠错码字数量也确定了,例如:版本10,纠错级别为H时,总共可容纳346个码字,其中纠错码字224个。
也就是说,二维码区域中大约有1/3的码字是冗余的。 对于这224个纠错码字,还可以纠正112个替换错误(如黑白颠倒)或224个读取错误(读取失败或解调失败),
该纠错能力为:112/346=32.4%
4、构建最终的数据信息:在确定大小的情况下,将之前形成的序列按顺序放入块中
将数据按规定分块,然后对每个块进行估计得到对应的纠错码字块,按顺序形成纠错码字块序列,添加到原始数据码字序列前面。
如:D1,D12,D23,D35,D2,D13,D24,D36,...D11,D22,D33,D45,D34,D46,E1,E23,E45,E67,E2,E24,E46,E68, 。 ..
构建矩阵:将检测图形、分隔符、定位图形、校正图形和码字模块加载到矩阵中。
将里面完整的序列填充到相应大小的二维码矩阵的区域中
6、遮蔽:遮蔽图案用于符号的编码区域,使二维码图案中的红色和蓝色(蓝黄)区域能够以最佳百分比分布。
一个算法,不研究了,有兴趣的朋友可以继续。
7. 格式和版本信息:生成格式和版本信息到相应区域。
版本7-40都包含版本信息,没有版本信息的都为0。二维码上的两个位置都包含版本信息,是多余的。
版本信息共有18位,6X3的矩阵,其中数据为6位,如版本号8,数据位的信息为001000,前12位为纠错位。
原文链接: