二维条码/二维码可以分为堆叠式/行排式二维条码和矩阵式二维条码。堆叠式/行排式二维条码形态上是由多行短截的一维条码堆叠而成;矩阵式二维条码以矩阵的形式组成,在矩阵相应元素位置上用“点”表示二进制“1”,用“空”表示二进制“0”,“点”和“空”的排列组成代码。
堆叠式/行排式二维条码,如,Code16K、Code49、PDF417等。
矩阵式二维码,最流行莫过于QRCODE。
矩阵式二维码存储的数据量更大;可以包含数字、字符,及中文文本等混合内容;有一定的容错性(在部分损坏以后可以正常读取);空间利用率高等。
如图1所示,为一个qrcode的基本结构,其中:
位置探测图形、位置探测图形分隔符、定位图形:用于对二维码的定位,对每个QR码来说,位置都是固定存在的,只是大小规格会有所差异;校正图形:规格确定,校正图形的数量和位置也就确定了;格式信息:表示改二维码的纠错级别,分为L、M、Q、H;版本信息:即二维码的规格,QR码符号共有40种规格的矩阵(一般为黑白色),从21×21(版本1),到177×177(版本40),每一版本符号比前一版本每边增加4个模块。数据和纠错码字:实际保存的二维码信息,和纠错码字(用于修正二维码损坏带来的错误)。php生成二维码的几种方法
图1二维码结构示意图
php生成二维码的快速开发方法常见有如下几种
参考代码如下
phpqrcode类的最新版本发布于2010年,它实现了二维码的生成方法,使用也很简单,下载即可看到示例,具体可下载试用
此外还提供了一个api可供调用,具体使用方法参考如下
注意
A.该api供提供四个参数:
level的级别可谓:L、M、Q、Hsize的大小为:1-10color的格式为rgb或hex颜色类型:r,g,b或#ff0000data为二维码包含的数据,注意,不同级别、大小的二维码,可包含的数据量不同
B.该api可接收get和post两种方式的数据
如果你希望生成的二维码名片可以被智能设备识别,并可以直接导入到通讯录中,那么就应遵循某种标准格式。常见的是生成vcard标准格式。一个简单的vcard名片格式例子参考如下:
vCard标准的2.1版被电子邮件客户端广泛支持。3.0版是一个包含在RFC2425和RFC2426中的IETF标准跟踪提案。vCard的常用文件扩展名是.vcf。
不同的程序对vCard标准实现亦不同。MacOSX中的AddressBook允许把所有联系人导出到一个vcf文件,而MicrosoftOutlook只能每人一个文件。Linux中KDE的Kontact允许每个文件导入或导出一人或多人。
预定义的值类型:uri,date,date-time,float新增加的值类型:binary,phone-number,utc-offsetandvcardvalue预定义的类型:SOURCE,NAME,PROFILE,BEGIN,END.新增加的类型:FN,N,NICKNAME,PHOTO,BDAY,ADR,LABEL,TEL,EMAIL,MAILER,TZ,GEO,TITLE,ROLE,LOGO,AGENT,orG,CATEGORIES,NOTE,PRODID,REV,SORT-STRING,SOUND,URL,UID,VERSION,CLASS,KEY预定义的参数:ENCODING,VALUE,CHARSET,LANGUAGE,CONTEXT.新增加的参数:TYPE
ADR;HOME;POSTAL;PARCEL:;;街道地址;深圳;广东;433330;中国ADR:是一个类型,表示是一条地址信息“;”号是分隔符合HOME;POSTAL;PARCEL表示参数,表示ADR的用途或者是类别:;;街道地址;深圳;广东;433330;中国表示是一个ADR值,地址值
Vcard内容必须以BEGIN:VCARD开头,以END:VCARD结尾vcard的类型标志特征详解
FN类型定义
目的:vcard对象的名称,一个vcard对象必须包含FN类型。例子:FN:Mr.JohnQ.Public,Esq.
N类型定义
目的:FN表示一个vcard对象的名称,N表示这个对象名称的组成部分例子:N:Public;John;Quinlan;Mr.;Esq.N:Stevenson;John;Philip,Paul;Dr.;Jr.,M.D.,A.C.P.各个组成部分可以用分号分号,每个组成部分可以用逗号。
NICKNAME类型定义
目的:表示别名例子:NICKNAME:RobbieNICKNAME:Jim,Jimmie
PHOTO类型定义
目的:vcard对象的图像信息例子:PHOTO;VALUE=uri:图片地址
如果使用内联的二进制数据表示图片信息,那么;ENCODING=b
BDAY类型定义
目的:表示出生日期例子:BDAY:1996-04-15BDAY:1953-10-15T23:10:00ZBDAY:1987-09-27T08:30:00-06:00
ADR类型定义
目的:是一个组合,用来表示一个地址信息,值类型是一个用分号分开的文本值例子:ADR;TYPE=dom,home,postal,parcel:;;123MainStreet;AnyTown;CA;91921-1234;AADR;HOME;POSTAL;PARCEL:;;街道地址;深圳;广东;444444;中国组合由一下部分顺序的组成:
thepostofficebox;theextendedaddress;thestreetaddress;thelocality(e.g.,city);theregion(e.g.,stateorprovince);thepostalcode;thecountryname
七个部分组成,如果,其他的一个部分没有,必须用分号分开
type参数的说明”dom”国内地址“intl”国际地址“parcel”包裹递送地址“home”居住地址;“work”工作地址;“pref”有多个地址的时候,优先的地址缺省的”TYPE=intl,postal,parcel,work”,可以替换
LABEL类型定义
目的:是一格式化的文本值,表示一个地址例子:LABEL;TYPE=dom,home,postal,parcel:Mr.JohnQ.Public,Esq.nMailDrop:TNEQBn123MainStreetnAnyTown,CA91921-1234nU.S.A.
TEL类型定义
缺省是“voice”.TYPE参数的用法是TYPE=work;TYPE=voice或者”TYPE=work,voice”,缺省值可以被重置“TYPE=work,home,voice,fax”.
EMAIL类型定义
“internet”表示一个internet类型地址“x400″表示是一个X.400地址“pref”最喜欢使用的邮件电子
缺省是”internet”.
MAILER类型定义
目的:指定一个电子邮件发送者例子:MAILER:PigeonMail2.1
TZ类型定义
目的:时区信息例子:TZ:-05:00TZ;VALUE=text:-05:00;EST;Raleigh/NorthAmerica缺省是一个utc-offset值.GEO类型定义
目的:地理位置信息例子GEO:37.386013;-122.082932CEO经度;纬度
TITLE类型定义
目的:工作位置,工作职能(jobtitle)例子TITLE:Director,ResearchandDevelopment
ROLE类型定义
目的:公司的职业(occupation)例子ROLE:ProgrammerLOGO类型定义
目的:公司logo,是一个图像信息例子LOGO;VALUE=uri:图片地址
说明:TYPE知道图像的格式,ENCODING=b表示是二进制的数据流URI表示是一个外部图像对象
AGENT类型定义
ORG类型定义
目的:表示一个组织的名称例子ORG:ABC,Inc.;NorthAmericanDivision;Marketing
CATEGORIES类型定义目的:vcard应用的分类信息例子:CATEGORIES:TRAVELAGENTCATEGORIES:INTERNET,IETF,INDUSTRY,INFORMATIONTECHNOLOGYNOTE类型定义
目的:对vcard的注释和说明例子:NOTE:Thisfaxnumberisoperational0800to1715EST,Mon-Fri.
PRODID类型定义
目的:指定创建Vcard对象的产品的ID例子:PRODID:-//ONLINEDIRECTORY//NONSGMLVersion1//ENREV类型定义
目的:指定当前Vcard的修改信息例子:REV:1995-10-31T22:27:10ZREV:1997-11-15SORT-STRING类型定义
目的:指定家庭名称或者其他名称对FN和N类型排序例子:
FN:RenevanderHartenN:vanderHarten;Rene;J.;Sir;R.D.O.N.SORT-STRING:HartenFN:RobertPauShouChangN:Pau;ShouChang;RobertSORT-STRING:PauFN:OsamuKouraN:Koura;OsamuSORT-STRING:KouraFN:OscardelPozoN:delPozoTriscon;OscarSORT-STRING:PozoFN:Chistined’AbovilleN:d’Aboville;ChristineSORT-STRING:Aboville
SOUND类型定义
可以用URI指定一个外部声音二进制流可以是内置的声音二进制流,ENCODING=bUID类型定义
目的:指定一个全球唯一的个人或资源标识。例子:UID:19950401-080045-40000F192713-0052URL类型定义目的:指定Vcard参考的路径。例子:URL:网址
VERSION类型定义
目的:指定Vcard使用的vcard规范的版本。例子:VERSION:3.0
CLASS类型定义
目的:指定访问Vcard对象的访问分级。例子:CLASS:PUBLICCLASS:PRIVATECLASS:CONFIDENTIAL说明:安全分级需要参考目录服务的访问分级
KEY类型定义
可以定义自己的类型,自己定义的类型需要以“x-”开头比如例子中的信息: