Java 生成vCard名片二维码(利用zxing开源项目)

版权声明:最终解释权归属Hern所有,恒! https://blog.csdn.net/qq_36761831/article/details/84900751

声明:其中部分内容来自其他博文!!! 

package com.arcode;

import java.io.File;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.Map;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;


public class juqureyCode {
	
	private static final int width = 300;//设置二维码的宽度
	private static final int height = 300;//设置二维码的高度
	private static final String format = "jpg";//设置二维码的格式
	private static final String url = "D:/QRCode/vrcode.jpg";
	private static final Path file = new File(url).toPath();//设置二维码的保存地址
	private static final String content = "BEGIN:VCARD\n" + "VERSION:3.0\n" + "N:Hern\n" 
											+ "EMAIL:[email protected]\n" + "TEL:12345678912" 
											+ "TEL;CELL:12345678912" + "ADR:地址\n" + "END:VCARD";//设置显示的内容

	public static void main(String[] args) {
		try {

			MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
			
			HashMap hints = new HashMap<>();
			hints.put(EncodeHintType.CHARACTER_SET, "utf-8");//设置编码格式
			hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);//设置纠错能力,纠错级别(L 7%、M 15%、Q 25%、H 30%)
			hints.put(EncodeHintType.MARGIN, 2);//设置边距
			
			BitMatrix bitMatrix =  new MultiFormatWriter().encode(content.toString(), BarcodeFormat.QR_CODE, width, height, hints);//生成二维码

			MatrixToImageWriter.writeToPath(bitMatrix, "jpg", file);
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

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 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
&lt;...the remainder of "B" encoded binary data...&gt;

  说明: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 &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/Category/Learning/PHP-qrcode-vcard.html

Phonebook
registration
function
formats
Property
name
Parameter description
Name N: Designates a text string to be set as the name in the phonebook. (0 or more characters)
When a field is divided by a comma (,), the first half is treated as the last name and the second half is treated as the first name.
Reading SOUND: Designates a text string to be set as the kana name in the phonebook. (0 or more characters)
When a field is divided by a comma (,), the first half is treated as the last name and the second half is treated as the first name.
TEL TEL: Designates a text string to be set as the telephone number in the phonebook. (1 to 24 digits)
TEL-AV TEL-AV: Designates a text string to be set as the videophone number in the phonebook. (1 to 24 digits)
E-mail EMAIL: Designates a text string to be set as the e-mail address in the phonebook. (0 or more characters)
Memo NOTE: Designates a text string to be set as the memo in the phonebook. (0 or more characters)
Birthday BDAY: Designates a text string to be set as the birthday in the phonebook. (8 digits)
The 8 digits consist of the year (4 digits), month (2 digits) and day (2 digits), in order.
Address ADR: Designates a text string to be set as the address in the phonebook. (0 or more characters)
The fields divided by commas (,) denote PO box, room number, house number, city, prefecture, zip code and country, in order.
URL URL: Designates a text string to be set as the homepage URL in the phonebook. (0 or more characters)
Nickname NICKNAME: Designates a text string to be set as the nickname in the phonebook. (0 or more characters)

上面是MECARD的格式,是日本的docomo公司制定的,一般手机应该都能用,详细的说明文档在

还有其他俩种:VCARD 或 MEMORY 格式,Vcard这个比较常见,文档在这!

举俩个例子:
1.

MECARD:URL:http://www.liero.tk;EMAIL:[email protected];NOTE:I'm an EE Student;NICKNAME:Liero;;

2.

MECARD:N:陈某某;ORG:某某有限公司;TIL:人事经理;TEL:13800138000;URL:weibo.com/siphp;DIV:siphp;EMAIL:[email protected];ADR:中国深圳;NOTE:QQ :123456;;

一般这个是和二维码QR Code

猜你喜欢

转载自blog.csdn.net/qq_36761831/article/details/84900751