如果你希望生成的二维码名片可以被智能设备识别,并可以直接导入到通讯录中,那么就应遵循某种标准格式。常见的是生成vcard标准格式。一个简单的vcard名片格式例子参考如下: BEGIN:VCARD VERSION:3.0 FN:任侠 TEL;CELL;VOICE:15201280000 TEL;WORK;VOICE:010-62100000 TEL;WORK;FAX:010-62100001 EMAIL;PREF;INTERNET:lzw#lzw.me URL:http://lzw.me orG:志文工作室 ROLE:产品部 TITLE:CTO ADR;WORK;POSTAL:北京市朝阳区北四环中路35号;100101 REV:2012-12-27T08:30:02Z 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 <...remainder of "B" encoded binary data...> 如果使用内联的二进制数据表示图片信息,那么;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 QB\n123 Main Street\nAny 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 <...the remainder of "B" encoded binary data...> 说明:TYPE知道图像的格式,ENCODING=b表示是二进制的数据流 URI表示是一个外部图像对象 AGENT类型定义 目的:指定另外一个人替换他的个人行为 例子:AGENT;VALUE=uri: CID:JQPUBLIC.part3.960129T083020.邮箱地址 AGENT:BEGIN:VCARD\nFN:Susan Thomas\nTEL:+1-919-555- 1234\nEMAIL\;INTERNET:主机地址\nEND:VCARD\n 说明:缺省是一个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 <...the remainder of "B" encoded binary data...> 可以用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