php生成二维码方法及二维码名片的生成格式vcard介绍 | 志文工作室

  • 1. 二维码简介
    • 1.1. 二维码分类

    • 1.2 QR CODE 介绍
  • 2. php生成二维码的快速开发方法
    • 2.1 google开放api接口实现
    • 2.2 基于开源类phpqrcode实现
    • 2.3 libqrencode类库
    • 2.4 QRcode Perl CGI & PHP scripts类库
    • 2.5 一个基于phpqrcode类的php二维码生成示例
  • 3. 二维码名片的格式 – vcard
    • 3.1 vcard格式简介
    • 3.2 vcard标准通信薄基本格式
      • 3.2.1 VCard 数据格式的标识符 – VCARD
      • 3.2.2 vCard数据格式行: 类型 [;参数]:值
      • 3.2.3 预定义类型的用法  
        • 3.2.3.1 BEGIN 和 END 类型
        • 3.2.3.2 标识类型
        • 3.2.3.3 联系方式
        • 3.2.3.4 地理类型
      • 3.2.3.5 组织类型
      • 3.2.3.6 解释类型
      • 3.2.3.7 Security 类型
      • 3.2.3.8 扩展类型

1. 二维码简介

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

1.1. 二维码分类

二维条码/二维码可以分为堆叠式/行排式二维条码和矩阵式二维条码。 堆叠式/行排式二维条码形态上是由多行短截的一维条码堆叠而成;矩阵式二维条码以矩阵的形式组成,在矩阵相应元素位置上用“点”表示二进制“1”, 用“空”表示二进制“0”,“点”和“空”的排列组成代码。

堆叠式/行排式二维条码,如,Code 16K、Code 49、PDF417等。

矩阵式二维码,最流行莫过于QR CODE。

矩阵式二维码存储的数据量更大;可以包含数字、字符,及中文文本等混合内容;有一定的容错性(在部分损坏以后可以正常读取);空间利用率高等。

1.2 QR CODE 介绍

如图1所示,为一个qrcode的基本结构,其中:

位置探测图形、位置探测图形分隔符、定位图形:用于对二维码的定位,对每个QR码来说,位置都是固定存在的,只是大小规格会有所差异;

校正图形:规格确定,校正图形的数量和位置也就确定了;

格式信息:表示改二维码的纠错级别,分为L、M、Q、H;

版本信息:即二维码的规格,QR码符号共有40种规格的矩阵(一般为黑白色),从21×21(版本1),到177×177(版本40),每一版本符号比前一版本 每边增加4个模块。

数据和纠错码字:实际保存的二维码信息,和纠错码字(用于修正二维码损坏带来的错误)。php生成二维码的几种方法

month_1212/g20121227172722.png

图1  二维码结构示意图

2. php生成二维码的快速开发方法

php生成二维码的快速开发方法常见有如下几种

2.1 google开放api接口实现

参考代码如下

view source

01 generateQRfromGoogle($urlToEncode);
02 /**
03  * google api 二维码生成【QRcode可以存储最多4296个字母数字类型的任意文本,具体可以查看二维码数据格式】
04  * @param string $chl 二维码包含的信息,可以是数字、字符、二进制信息、汉字。不能混合数据类型,数据必须经过UTF-8 URL-encoded.如果需要传递的信息超过2K个字节,请使用POST方式
05  * @param int $widhtHeight 生成二维码的尺寸设置
06  * @param string $EC_level 可选纠错级别,QR码支持四个等级纠错,用来恢复丢失的、读错的、模糊的、数据。
07  *                         L-默认:可以识别已损失的7%的数据
08  *                         M-可以识别已损失15%的数据
09  *                         Q-可以识别已损失25%的数据
10  *                         H-可以识别已损失30%的数据
11  * @param int $margin 生成的二维码离图片边框的距离
12  */
13 function generateQRfromGoogle($chl,$widhtHeight ='150',$EC_level='L',$margin='0')
14 {
15     $chl = urlencode($chl);
16     echo '<img src="http://chart.apis.google.com/chart?chs='.$widhtHeight.'x'.$widhtHeight.'&cht=qr&chld='.$EC_level.'|'.$margin.'&chl='.$chl.'" alt="QR code" widhtHeight="'.$widhtHeight.'" widhtHeight="'.$widhtHeight.'"/>';
17 }

QR code

2.2 基于开源类phpqrcode实现

phpqrcode类的最新版本发布于2010年,它实现了二维码的生成方法,使用也很简单,下载即可看到示例,具体可下载试用

地址:http://phpqrcode.sourceforge.net/

下载:http://sourceforge.net/projects/phpqrcode/

2.3 libqrencode类库

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

php支持请参考:http://hirokawa.netflowers.jp/entry/4900/

2.4 QRcode Perl CGI & PHP scripts类库

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

2.5 一个基于phpqrcode类的php二维码生成示例

具体演示可参考这里:http://lzw.me/pages/qrcode/

此外还提供了一个api可供调用,具体使用方法参考如下

XML/HTML代码

  1. <img src=http://lzw.me/pages/qrcode/qrcodeapi.php?level=Lcolor=255,0,0size=4data=http://lzw.me/pages/qrcode/ alt=“qrcode二维码示例” />  

qrcode二维码:志文工作室

注意

A. 该api供提供四个参数:

level的级别可谓:L、M、Q、H

size的大小为:1-10

color的格式为rgb或hex颜色类型:r,g,b 或 #ff0000

data为二维码包含的数据,注意,不同级别、大小的二维码,可包含的数据量不同

B. 该api可接收get和post两种方式的数据

3. 二维码名片的格式 – vcard

如果你希望生成的二维码名片可以被智能设备识别,并可以直接导入到通讯录中,那么就应遵循某种标准格式。常见的是生成vcard标准格式。一个简单的vcard名片格式例子参考如下:

 

BEGIN:VCARD</p><p>VERSION:3.0</p><p>FN:任侠</p><p>TEL;CELL;VOICE:15201280000</p><p>TEL;WORK;VOICE:010-62100000</p><p>TEL;WORK;FAX:010-62100001</p><p>EMAIL;PREF;INTERNET:lzw#lzw.me</p><p>URL:http://lzw.me</p><p>orG:志文工作室</p><p>ROLE:产品部</p><p>TITLE:CTO</p><p>ADR;WORK;POSTAL:北京市朝阳区北四环中路35号;100101</p><p>REV:2012-12-27T08:30:02Z</p><p>END:VCARD

如果你想更详细的定制所需要的格式,则需要详细的了解vcard的格式标准。

3.1 vcard格式简介

vCard(或称做Versitcard)最早是由Versit联盟于1995年提出的,当时联盟成员包括苹果公司,AT&T科技(后来的朗讯),IBM及西门子。在1996年十二月,格式的拥有权移至因特网邮件联盟(IMC),此联盟是由一些关注因特网电子邮件的公司所组成。

vCard标准的2.1版被电子邮件客户端广泛支持。3.0版是一个包含在RFC 2425和RFC 2426中的IETF标准跟踪提案。vCard的常用文件扩展名是.vcf。

不同的程序对vCard标准实现亦不同。Mac OS X中的Address Book允许把所有联系人导出到一个vcf文件,而Microsoft Outlook只能每人一个文件。Linux中KDE的Kontact允许每个文件导入或导出一人或多人。

3.2 vcard标准通信薄基本格式

3.2.1 VCard 数据格式的标识符 – VCARD

预定义的值类型:uri, date, date-time, float

新增加的值类型:binary, phone-number, utc-offset and vcard value

预定义的类型: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

3.2.2 vCard数据格式行: 类型 [;参数]:值

ADR;HOME;POSTAL;PARCEL:;;街道地址;深圳;广东;433330;中国

ADR:是一个类型,表示是一条地址信息

“;”号是分隔符合

HOME;POSTAL;PARCEL表示参数,表示ADR的用途或者是类别

:;;街道地址;深圳;广东;433330;中国 表示是一个ADR值,地址值

3.2.3 预定义类型的用法  

3.2.3.1 BEGIN 和 END 类型

Vcard内容必须以BEGIN:VCARD开头,以END:VCARD结尾vcard的类型标志特征详解

3.2.3.2 标识类型

FN 类型定义

目的:vcard对象的名称,一个vcard对象必须包含FN类型。

例子:FN:Mr. John Q. 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:Robbie

NICKNAME:Jim,Jimmie

PHOTO类型定义

目的:vcard对象的图像信息

例子:PHOTO;VALUE=uri:图片地址

PHOTO;ENCODING=b;TYPE=JPEG:MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcN

AQEEBQAwdzELMAkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENvbW11bm ljYXRpb25zIENvcnBvcmF0aW9uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0

&lt;…remainder of “B” encoded binary data…&gt;

如果使用内联的二进制数据表示图片信息,那么;ENCODING=b

BDAY类型定义

目的:表示出生日期

例子:BDAY:1996-04-15

BDAY:1953-10-15T23:10:00Z

BDAY:1987-09-27T08:30:00-06:00

3.2.3.3 联系方式

ADR 类型定义

目的:是一个组合,用来表示一个地址信息,值类型是一个用分号分开的文本值

例子:ADR;TYPE=dom,home,postal,parcel:;;123 Main Street;Any Town;CA;91921-1234;A

ADR;HOME;POSTAL;PARCEL:;;街道地址;深圳;广东;444444;中国

组合由一下部分顺序的组成:

  the post office box;

the extended address;

the street address;

the locality (e.g., city);

the region (e.g., state or province);

the postal code;

the country name

七个部分组成,如果,其他的一个部分没有,必须用分号分开

type 参数的说明

  ”dom” 国内地址

“intl” 国际地址

“parcel”包裹递送地址

“home” 居住地址;

“work”工作地址;

“pref” 有多个地址的时候,优先的地址

缺省的”TYPE=intl,postal,parcel,work”,可以替换

LABEL类型定义

目的:是一格式化的文本值,表示一个地址

例子:LABEL;TYPE=dom,home,postal,parcel:Mr.John Q. Public, Esq.n

Mail Drop: TNE QBn123 Main StreetnAny Town, CA 91921-1234

nU.S.A.

type 参数的说明

  ”dom” 国内地址

“intl” 国际地址

“parcel”包裹递送地址

“home” 居住地址;

“work”工作地址;

“pref” 有多个地址的时候,优先的地址

缺省的”TYPE=intl,postal,parcel,work”,可以替换

和ADR的不同是 ADR的值是用分号分开的数据,LABEL就是一个格式化的文本。

电话通信地址类型

TEL类型定义

目的:指定一个电话号码

例子:TEL;TYPE=work,voice,pref,msg:+1-213-555-1234

说明:值是一个规范的全球唯一的电话号码

TYPE参数的值有:

  ”home”表示家庭电话

“msg” 表示这个号码支持语音

“work” 工作电话

“pref” 表示多个电话中最喜欢使用的电话

“voice” 声音电话号码

“fax”传真号码

“cell” 表示手机电话

“video” 视频电话

“pager” 调度电话,估计是总机的电话

“bbs” 公开的广播系统的电话

“modem” 调制解调器电话

“car”汽车电话

“isdn” ISDN连接电话号码

“pcs” 个人通信服务电话

缺省是 “voice”.

TYPE参数的用法是TYPE=work;TYPE=voice或者”TYPE=work,voice”,缺省值可以被重置

“TYPE=work,home,voice,fax”.

EMAIL类型定义

目的:指定一个电子邮件

例子:EMAIL;TYPE=internet:邮箱地址

EMAIL;TYPE=x400:邮箱地址

EMAIL;TYPE=internet,pref:邮箱地址

TYPE参数的使用

“internet” 表示一个internet 类型地址

“x400″ 表示是一个 X.400 地址

“pref”最喜欢使用的邮件电子

缺省是”internet”.

MAILER 类型定义

目的:指定一个电子邮件发送者

例子:MAILER:PigeonMail 2.1

3.2.3.4 地理类型

TZ类型定义

目的:时区信息

例子:TZ:-05:00

TZ;VALUE=text:-05:00; EST; Raleigh/North America

缺省是一个utc-offset值.

GEO类型定义

目的:地理位置信息

例子GEO:37.386013;-122.082932

CEO 经度;纬度

3.2.3.5 组织类型

TITLE类型定义

目的:工作位置,工作职能(job title)

例子TITLE:Director, Research and Development

ROLE 类型定义

目的:公司的职业(occupation)

例子ROLE:Programmer

LOGO类型定义

目的:公司logo,是一个图像信息

例子LOGO;VALUE=uri:图片地址

LOGO;ENCODING=b;TYPE=JPEG:MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcN AQEEBQAwdzELMAkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENvbW11bm

ljYXRpb25zIENvcnBvcmF0aW9uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0

&lt;…the remainder of “B” encoded binary data…&gt;

说明:TYPE知道图像的格式,ENCODING=b表示是二进制的数据流

URI表示是一个外部图像对象

AGENT类型定义

目的:指定另外一个人替换他的个人行为

例子:AGENT;VALUE=uri: CID:JQPUBLIC.part3.960129T083020.邮箱地址

AGENT:BEGIN:VCARDnFN:Susan ThomasnTEL:+1-919-555-

1234nEMAIL;INTERNET:主机地址nEND:VCARDn

说明:缺省是一个Vcard对象,当时也可是一个URI指定的外部Vcard对象

ORG类型定义

目的:表示一个组织的名称

例子ORG:ABC, Inc.;North American Division;Marketing

3.2.3.6 解释类型

CATEGORIES类型定义

目的:vcard应用的分类信息

例子:CATEGORIES:TRAVEL AGENT

CATEGORIES:INTERNET,IETF,INDUSTRY,INFORMATION TECHNOLOGY

  NOTE 类型定义

目的:对vcard的注释和说明

例子:NOTE:This fax number is operational 0800 to 1715

EST, Mon-Fri.

  PRODID类型定义

目的:指定创建Vcard对象的产品的ID

例子:PRODID:-//ONLINE DIRECTORY//NONSGML Version 1//EN

  REV类型定义

目的:指定当前Vcard的修改信息

例子:REV:1995-10-31T22:27:10Z

REV:1997-11-15

  SORT-STRING类型定义

目的:指定家庭名称或者其他名称对FN和N类型排序

例子:

        FN:Rene van der Harten

N:van der Harten;Rene;J.;Sir;R.D.O.N.

SORT-STRING:Harten

FN:Robert Pau Shou Chang

N:Pau;Shou Chang;Robert

SORT-STRING:Pau

FN:Osamu Koura

N:Koura;Osamu

SORT-STRING:Koura

FN:Oscar del Pozo

N:del Pozo Triscon;Oscar

SORT-STRING:Pozo

FN:Chistine d’Aboville

N:d’Aboville;Christine

SORT-STRING:Aboville

  SOUND类型定义

目的:指定Vcard的数字声音信息,缺省是指定vcard的name类型的发音信息。

例子: SOUND;TYPE=BASIC;VALUE=uri:CID:JOHNQPUBLIC.part8.

19960229T080000.地址

SOUND;TYPE=BASIC;ENCODING=b:MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcN AQEEBQAwdzELMAkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENvbW11bm ljYXRpb25zIENvcnBvcmF0aW9uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0 &lt;…the remainder of “B” encoded binary data…&gt;

可以用URI指定一个外部声音二进制流

可以是内置的声音二进制流,ENCODING=b

  UID类型定义

目的:指定一个全球唯一的个人或资源标识。

例子:UID:19950401-080045-40000F192713-0052

URL类型定义

目的:指定Vcard 参考的路径。

例子:URL: 网址

  VERSION类型定义

目的:指定Vcard使用的vcard规范的版本。

例子: VERSION:3.0

3.2.3.7 Security 类型

  CLASS类型定义

目的:指定访问Vcard对象的访问分级。

例子: CLASS:PUBLIC

CLASS:PRIVATE

CLASS:CONFIDENTIAL

说明:安全分级需要参考目录服务的访问分级

  KEY 类型定义

目的:指定Vcard的公共钥匙值(加密解密是使用)或者是授权认证。

例子:

KEY;ENCODING=b:MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcNAQEEBQA

wdzELMAkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENbW11bmljYX

Rpb25zIENvcnBvcmF0aW9uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0

ZW1zMRwwGgYDVQQDExNyb290Y2EubmV0c2NhcGUuY29tMB4XDTk3MDYwNj

E5NDc1OVoXDTk3MTIwMzE5NDc1OVowgYkxCzAJBgNVBAYTAlVTMSYwJAYD

VQQKEx1OZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3JwLjEYMBYGA1UEAx

MPVGltb3RoeSBBIEhvd2VzMSEwHwYJKoZIhvcNAQkBFhJob3dlc0BuZXRz

Y2FwZS5jb20xFTATBgoJkiaJk/IsZAEBEwVob3dlczBcMA0GCSqGSIb3DQ

EBAQUAA0sAMEgCQQC0JZf6wkg8pLMXHHCUvMfL5H6zjSk4vTTXZpYyrdN2

dXcoX49LKiOmgeJSzoiFKHtLOIboyludF90CgqcxtwKnAgMBAAGjNjA0MB

EGCWCGSAGG+EIBAQQEAwIAoDAfBgNVHSMEGDAWgBT84FToB/GV3jr3mcau

+hUMbsQukjANBgkqhkiG9w0BAQQFAAOBgQBexv7o7mi3PLXadkmNP9LcIP

mx93HGp0Kgyx1jIVMyNgsemeAwBM+MSlhMfcpbTrONwNjZYW8vJDSoi//y

rZlVt9bJbs7MNYZVsyF1unsqaln4/vy6Uawfg8VUMk1U7jt8LYpo4YULU7

UZHPYVUaSgVttImOHZIKi4hlPXBOhcUQ==

3.2.3.8 扩展类型

可以定义自己的类型,自己定义的类型需要以“x-”开头

比如例子中的信息:

  X-QQ:000000

X-ICQ:icq

X-WAB-GENDER:2

本文固定链接: http://lzw.me/a/php-qrcode-vcard.html | 志文工作室

来源URL:http://lzw.me/a/php-qrcode-vcard.html