专注ECSHOP第九年
始自2007,服务二千多商户,不断为您增光溢彩

ECSHOP生成二维码

二维条形码,最早发明于日本,它是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的,在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理。它具有条码技术的一些共性:每种码制有其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等。同时还具有对不同行的信息自动识别功能、及处理图形旋转变化等特点。

二维条形码具有储存量大、保密性高、追踪性高、抗损性强、备援性大、成本便宜等特性,这些特性特别适用于表单、安全保密、追踪、证照、存货盘点、资料备援等方面。

本文介绍几种使用ECSHOP生成二维码的方法.

一、使用google api 生成二维码

<?php
/**
 * google api 生成二维码【QRcode可以存储最多4296个字母数字类型的任意文本,具体可以查看二维码数据格式】
 * @param string $data 二维码包含的信息,可以是数字、字符、二进制信息、汉字。不能混合数据类型,数据必须经过UTF-8 URL-encoded.如果需要传递的信息超过2K个字节,请使用POST方式
 * @param int $widhtHeight 生成二维码的尺寸设置
 * @param string $EC_level 可选纠错级别,QR码支持四个等级纠错,用来恢复丢失的、读错的、模糊的、数据。
 *                         L-默认:可以识别已损失的7%的数据
 *                         M-可以识别已损失15%的数据
 *                         Q-可以识别已损失25%的数据
 *                         H-可以识别已损失30%的数据
 * @param int $margin 生成的二维码离图片边框的距离
 */

function generateQRfromGoogle($data, $widhtHeight='150', $EC_level='L', $margin='0')
{
	$url = urlencode($data);
	echo '<img src="http://chart.apis.google.com/chart?chs='.$widhtHeight.'x'.$widhtHeight.'&cht=qr&chld='.$EC_level.'|'.$margin.'&chl='.$data.'" widhtHeight="'.$widhtHeight.'" widhtHeight="'.$widhtHeight.'"/>';
}

function qrcode($width, $height, $string)
{
	$post_data = array();
	$post_data['cht'] = 'qr';
	$post_data['chs'] = $width."x".$height;
	$post_data['chl'] = $string;
	$post_data['choe'] = "UTF-8";
	$url = "http://chart.apis.google.com/chart";
	$data_Array = array();

	foreach($post_data as $key=>$value)
	{
		$data_Array[] = $key.'='.$value;
	}

	$data = implode("&", $data_Array);
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_POST, 1);
	curl_setopt($ch, CURLOPT_HEADER, 0);
	curl_setopt($ch, CURLOPT_URL, $url);    
	curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	$result = curl_exec($ch);
	echo "<img src =\"data:image/png;base64,".base64_encode($result)."\" >"; //不写header
	//return $result; //写header("Content-type:image/png");
}

$data = 'http://www.phpally.com'; //生成二维码的字符串

//GET方式
generateQRfromGoogle($data);

//POST方式
$width = 150;
$height = 150;
echo qrcode($width, $height, $data);
?>

 

生成的二维码如下:

20130829112838

二、使用php QR Code类库生成二维码

注意使用该类库必须首先下载类库包,下载地址:http://phpqrcode.sourceforge.net

 

<?php 
include "./phpqrcode.php";
$data = 'http://www.phpally.com'; //生成二维码的字符串
$errorCorrectionLevel = "L";
$matrixPointSize = "4";
QRcode::png($data, false, $errorCorrectionLevel, $matrixPointSize);
?>

 

三、使用libqrencode生成二维码

地址:http://fukuchi.org/works/qrencode/index.en.html

四、使用QRcode Perl CGI & PHP scripts生成二维码

地址:http://www.swetake.com/qr/qr_cgi.html

二维码(2-dimensional bar code),是用某种特定的几何图形按照一定规律在平面分布的黑白相间的图形记录数据符合信息的。常用到的码制有:Data Matrix , Maxi Code , Aztec , QR Code , Vericode , PDF417 , Ultracode , Code 49 , Code 16K等,其中最流行莫过于QR CODE。

 

QR CODE 介绍

20130829112138

上图是一个QR CODE的基本结构,其中:

位置探测图形、位置探测图形分隔符、定位图形:用于对二维码的定位,对每个QR码来说,位置都是固定存在的,只是大小规格会有所差异;
校正图形:规格确定,校正图形的数量和位置也就确定了;
格式信息:表示改二维码的纠错级别,分为L、M、Q、H;
版本信息:即二维码的规格,QR码符号共有40种规格的矩阵(一般为黑白色),从21×21(版本1),到177×177(版本40),每一版本符号比前一版本 每边增加4个模块。
数据和纠错码字:实际保存的二维码信息,和纠错码字(用于修正二维码损坏带来的错误)。

简要的编码过程:

1. 数据分析:确定编码的字符类型,按相应的字符集转换成符号字符; 选择纠错等级,在规格一定的条件下,纠错等级越高其真实数据的容量越小。
2. 数据编码:将数据字符转换为位流,每8位一个码字,整体构成一个数据的码字序列。其实知道这个数据码字序列就知道了二维码的数据内容。

20130829112600

20130829112620

数据可以按照一种模式进行编码,以便进行更高效的解码,例如:对数据:01234567编码(版本1-H),
1) 分组:012 345 67
2) 转成二进制:012→0000001100,  345→0101011001, 67 →1000011
3) 转成序列:0000001100 0101011001 1000011
4) 字符数 转成二进制:8→0000001000
5) 加入模式指示符(上图数字)0001:0001 0000001000 0000001100 0101011001 1000011
对于字母、中文、日文等只是分组的方式、模式等内容有所区别。基本方法是一致的

3. 纠错编码:按需要将上面的码字序列分块,并根据纠错等级和分块的码字,产生纠错码字,并把纠错码字加入到数据码字序列后面,成为一个新的序列。

20130829113241

在二维码规格和纠错等级确定的情况下,其实它所能容纳的码字总数和纠错码字数也就确定了,比如:版本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,…

5. 构造矩阵:将探测图形、分隔符、定位图形、校正图形和码字模块放入矩阵中。

20130829113437

把上面的完整序列填充到相应规格的二维码矩阵的区域中

6. 掩摸:将掩摸图形用于符号的编码区域,使得二维码图形中的深色和浅色(黑色和白色)区域能够比率最优的分布。

7. 格式和版本信息:生成格式和版本信息放入相应区域内。版本7-40都包含了版本信息,没有版本信息的全为0。二维码上两个位置包含了版本信息,它们是冗余的。版本信息共18位,6X3的矩阵,其中6位时数据为,如版本号8,数据位的信息时 001000,后面的12位是纠错位。

 

分享到:更多 ()
1

评论 1

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    谢谢博主了,博主辛苦了,呵呵

    飞蕾2年前 (2015-12-15)回复

阿牛ECSHOP 更专业 更方便

关于我们联系我们