管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
, H% S& A0 J1 z& b---------------------------------------------------------------------------------------------------
$ ?# T' N, T& R3 c6 {二维码的分类: \# j6 a& o/ p) Z8 T/ V* [: r
线性堆叠式二维码
' w7 N3 ^5 J6 f; n' i3 h/ m- e y8 ^7 M6 B, o* r
矩阵式二维码
9 ]) Q5 W* H6 I) {$ A; Y
) L0 ~$ V9 k; }6 v4 C- b+ l二维码的优缺点7 y9 B7 F" x* H) B1 W4 Z& B8 X( V
优点
! {; J' r3 H0 S: }' `1 Y, T3 y信息容量大
% ?0 r0 k4 {8 Z4 H9 c* Y( C' d2 F% O
编码范围广, B; E4 z9 E* Y! m
3 o3 y5 r$ T" {
容错能力强0 k0 D- w0 _ O" d' S8 C% a ?. n# z
/ O7 R" K8 {; _
译码可靠性高, Q" ^9 Q7 ?) B5 F1 ~
$ L1 D/ N' O0 _1 O1 N) F可引入加密措施
7 n! m' ?" K1 i+ v3 i1 C$ C6 \5 K( F2 x5 E2 R
成本低,易制作' k. e; u) c/ c& T f% {% ]
( n& _& a- B' ]0 P4 \+ O/ s
缺点# q& |7 G3 A% {* v$ q! T2 y
二维码技术成为手机病毒、钓鱼网站传播的新渠道
' ~4 I7 I' _2 w# g6 E4 r( ]# ]7 c. K( W' g: P# Z& }# R3 T
信息泄密
% y5 I0 l( ~$ I2 E6 }* P. F& z# n0 s6 I. ~/ h
目前流行的三大国际标准
. T4 C: Z4 a- ?6 l) E: @PDF417:不支持中文
# k/ [, n- \0 e2 q3 H7 e" e. ^' H! P3 s+ u4 a+ ~! P
DM:专利未公开,需支付专利费用% a; s0 Q2 B$ s4 |1 x
% F2 B* z6 }! G$ L; t4 F2 p
QR CODE:专利公开,支持中文
' }. N: c( p- D7 U0 B" W5 L K4 q7 b5 w. y, V
QR CODE 纠错能力
7 x& Y0 ^1 p6 j8 J( t% \L级:约可纠错7%的数据码字& ~$ R/ p. N5 y7 Q: D$ Q
, |$ Q* n2 e Z9 a$ I$ bM级:约可纠错15%的数据码字0 Z* q1 e# ?1 D
$ Q' ~0 C4 k* [1 F& K1 \3 S
Q级:约可纠错25%的数据码字
7 T1 {( b' E9 r0 n7 J% N/ \- b+ Z1 x8 [% }) ?4 g1 \% f3 A
H级:约可纠错30%的数据码字
, G/ v4 Q" J8 s+ {. T% v5 n4 D% h% Z% P: @" g
前提条件! D/ p& H9 G5 g3 w0 E; _+ ~
GD库
# {2 P' ]" i V, U) L3 _: P4 W1 q4 f4 s/ F/ F
一、PHP生成QR CODE$ p; Y, p% g- R( ~5 u; M
官网:http://phpqrcode.sourceforge.net/
9 ?% M7 P' L) Q! \5 a* z3 Z3 ^! r1 g; M$ ^- _6 W
下载源码:https://github.com/endroid/qr-code
! A- L; {) _5 [) t/ P& A" V b' o: ?) U/ W/ w7 l
目录结构
) L& [; {- I! W; K2 }, d9 r& c
' j/ r8 b6 _; A0 s4 } S$ O, ~
, P' k7 D+ n+ E) z& Q2 ^; s7 S1、qrcode_create.php0 B* [0 A w/ A0 l6 B" M
ps:生成普通二维码% ^. V; [& q7 _
- 5 F+ I8 K8 Z* [$ _! ?0 }7 `; A" \
- include_once "./qrcode/phpqrcode.php";/**5 W: w W K& r( X+ K o; ]
- ( q+ M p: W1 L/ \) c; K- s
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径
% R/ B- a/ h! F - ) N2 t1 \. d/ l$ ]4 I* D
- * 在浏览器上直接生成一个二维码(内容为abc)
) R5 x# M& e$ q( J - 5 l1 B0 E5 Z" ]& X. z# `1 j
- */QRcode::png("abc");$ H0 G3 u' F$ G4 t9 R& U! [
- : ^4 |- y* D5 j% @
- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**, S# h$ O- A% F! i9 [
- 9 @& `7 d; Q' q7 X, T1 ^; C% M
- * 生成文件到本地( f( I" x6 P0 v* j( y; V' K w u
0 a- H6 G7 t" I- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)4 x. d" j! @; h0 v
- ( z% I0 j6 Q) u s' n2 M1 o! M; p, U
- * PS:$saveandprint源码的p6参数做了修改
. M' G, J1 |3 b6 W' n
' x6 S" L! h! H2 k0 C- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);
* n. E8 [5 h9 c" Q& q8 i* ]
2 X# @6 u, |1 w2 N' \- ( h6 l9 h6 @5 _( O- Q
复制代码 $ x; A- x- F7 e
2、qrcode_logo.php$ m. u, H; n4 M8 [1 d/ r# z& y
ps:生成带Logo的二维码
6 D7 t5 B) o7 B- /**$ x0 K1 C9 C7 V$ R9 n3 y& i8 c
- % t% _) S3 W& G$ Z6 M% n4 h( Q
- * Created by PhpStorm.; r' t1 ]- r: x* Q1 J0 ^( K
P: X7 s* l0 @0 B" R7 Y3 j* G1 J- * User: user
! h5 S2 P0 O3 P8 A! O
0 ~' B5 _3 J) x! Z. h' p3 U- * Date: 2018/8/16% E7 ^5 l6 n' d" M, S
- , o, m7 i3 f* ^
- * Time: 10:43
, J8 a+ q2 g' T8 l/ v. A - * E/ \$ F, N# W8 t
- */include "./qrcode/phpqrcode.php";$txt = "测试内容";: x3 d, G7 C& t1 `
- % T! P9 q. O8 _! d" C
- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称8 f& m' _" [3 F. b- y; X
9 E. p2 O# b- {/ L1 f- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是
; ]# v L, Q$ i# [# M/ A
, H! s l5 N5 y8 [* t' \- $margin = 2;//边距
9 N: B5 H: p5 |6 \# m" S
9 U- k- n0 P/ T, Y0 s+ S" p- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片
0 f% d; M1 c- s
4 U3 n* n! I3 x5 @) a- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){ $ l9 _5 U; O" D0 m6 |+ r
$ U1 |6 ]$ _2 M- {$ t- $QR = $picPathAndName; //已经生成的原始二维码图) c* m- K0 g7 V1 r
3 Y6 g! {& B8 b+ r$ \+ I, Z2 b- $Logo = './pic/logo.png';
& v& V" l7 o6 L$ t$ e a$ B6 g! H5 k, i
' n1 D) M0 P: D5 P/ ], E4 h8 c- $Logo_re = './pic/test_logo.png';
$ g5 \7 Z) G2 f6 E9 p6 ^! B3 f - ( O8 F& l! m8 L9 T; F1 |
- $QR = imagecreatefromstring(file_get_contents($QR)); 7 a1 [1 {: V% n6 {8 }+ K
- D$ q: O- ` ^: a' U8 _% r7 x, U% i: s
- $Logo = imagecreatefromstring(file_get_contents($Logo)); 0 z0 K, o8 d/ v$ p4 g/ H
- : t, V! K5 n) V: k- W
- $QR_width = imagesx($QR); //二维码图片宽度) M \9 F t3 P4 {* E
. J/ G6 v8 _, Y- $QR_height = imagesy($QR); //二维码图片高度0 g4 @% R$ }& ^$ O
4 s& w; T( m* M; T O. O- $logo_width = imagesx($Logo); //logo图片宽度
. B6 f$ c' |4 g- Y" _5 b - . d- E8 M3 L, A) M; H8 S
- $logo_height = imagesy($Logo); //logo图片高度( H8 i1 K8 K3 _% F
5 c. t0 K- v! b+ q' ]2 p- $logo_qr_width = $QR_width / 5;
1 M/ S* E$ D! l) A9 r - : T# Z- x! S! U2 m
- $scale = $logo_width / $logo_qr_width;
( P( e: ?$ |' X; v - 0 H9 m6 @* E) A# _# x$ H
- $logo_qr_height = $logo_height / $scale; 5 W- P& r# C- ?) l! q
- - q7 @: h$ r/ F$ u: F# x
- $from_width = ($QR_width - $logo_qr_width) / 2;
# ~/ H2 h# a3 p
. y9 d! k. n& M$ M- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
. z( x$ f0 y" L' d8 ~/ |( b - 4 N$ c4 {0 t2 K
- //输出图片7 S& K \) V. _/ A2 p
- * h# x; U. b* { o& [- @
- imagepng($QR, $Logo_re);' O7 g( a& ?6 \: I
% h+ Q) j! y! E- }
" t- g* L8 u( A5 g - + `5 O% \" L; g: f
- , h0 _9 o* _2 t, \ |
复制代码 3、qrcode_vcard.php (生成电子签名)
$ @/ ?4 e% ^$ { L- X' c6 B# O; `& S( x5 I
vCard格式:https://zh.wikipedia.org/wiki/VCard; d8 K0 t& X0 h% `
5 [$ Z8 ]0 z8 g
- 5 v( a ~* @) M/ C" z8 a
- * Created by PhpStorm.
3 D, z. Z; s! h! S; L5 r
u0 \% K2 p' p- * User: user
7 w8 d4 A3 h9 r# [: [9 ~
7 v5 V) X: k# O# G; a$ B5 C7 l- * Date: 2018/8/15
8 |/ S: c0 P: i8 P5 i9 K - + v# x0 p1 R: y7 Q- {, g. Z
- * Time: 23:00
7 Y* J5 o( q8 c, n. r1 b
6 L: a' M, r6 y4 h& N, }- */require_once "./qrcode/phpqrcode.php";/**9 {- G$ A k+ ]+ d2 _8 h
- 0 x/ T- U- v3 a* `
- * 生成电子签名
D6 k# b6 Q2 ] g' s! b
0 _, O$ y: g7 Q: ] K% Y/ _+ ]- * PS;使用微信扫描二维码3 |* c5 R a5 @& T4 c
- 4 h: s$ f- G" W9 R( x) O
- */$content = 'BEGIN:VCARD' . "\n";//起始标志
T1 `5 W1 s, a- X0 O( S3 P
- A, X1 X( W+ P6 K/ z- $content .= 'VERSION:2.1' . "\n";//当前版本# F% V$ H, W* ?- H
- ! b! Q4 v* I5 ]; Y8 ?6 p: i z
- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名% \. p! e) l, g& ~8 k
- 1 z) B% W) ^9 e- r* w6 G9 l' d6 L
- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称
' X. f) Z+ n: \& D) C) n2 n
% i' v3 i( x4 @4 K0 P- $content .= 'TITLE:PHP研发程序员' . "\n";//职位
7 D* {4 K" Y' C, V N
! s+ W* S5 U: Q. C+ J) F* @; I- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话
1 f: I2 O. }0 y6 V g - 4 G+ E- w d% i& a. D/ q) K
- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址8 u0 R; N5 ]: N6 ^
! c9 p$ a- p$ @% ~- z) u8 m/ Q- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)$ o- |- s g- m+ b" E
- 0 r2 W5 b+ y! \- F1 s c
- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话9 E5 X5 u5 m/ X: [( {% R
- 5 C6 u' l- h. |+ e! `
- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱
' w; O3 N4 U; G7 ]/ E+ W( } - 8 h, j& _' `; H7 W: j" \! ~
- $content .= 'URL:www.baidu.com' . "\n";//个人主页
+ \+ l5 ]8 x+ J } - , I2 q/ I1 F: G9 d! w! S
- $content .= 'END:VCARD' . "\n";//结束标志
- s- X: A# x, I0 o$ X
7 ^" Y- Z/ _$ H- QRcode::png($content);6 `3 K6 B7 ]! m2 P/ q* c+ K
- , A' r* w3 ~) t4 n2 `. Z! T5 S
- 9 D" |" Z- e5 \( d
复制代码
3 a1 P# z6 D( A1 Q$ ?相关文章推荐:
4 i; h1 N# P. v4 b/ P! m( F1.PHP生成微信二维码实例! F* O9 b' X& t6 X+ {
2.php网址转换生成二维码
5 {1 Y1 b: _0 \相关视频推荐:. o+ l: h& K5 d* D) L" K
1.独孤九贱(4)_PHP视频教程
+ R0 F) \* t" ~6 H5 P二、JQUERY生成QR CODE
/ z5 }. Q6 Q" Y3 V1 F" ~" T源码地址:https://github.com/jeromeetienne/jquery-qrcode6 c6 ^; w5 D# ^9 m# s o
; H6 E, g. i( ?- g3 P
jquery_create.php" k; S/ i; x& \5 M* E* b2 X4 s% E: f
2 s& ~3 b$ f3 Y' [- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码 : @0 h; a% A* S' o, \" g
三、PHP识别二维码5 s# t5 x' l9 { q( T
1、方法一
L: `' p6 q) @1 {- x: Q8 W环境需求,安装如下扩展
, V7 l2 M/ j% J6 d! p- ImageMagick
4 Z- ]# A- G; i, S: Y. [ Z- b- zbar; @5 y# M, }% a# G l' m
- php-zbarcode0 m9 J N( W$ A
7 w o7 ?; n; C- J& [4 f! U
2、方法二7 `7 o6 O/ W5 [& x: Z! Z: D" x
PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以6 H6 x# q6 |8 Z4 v2 p
qrReader类:https://github.com/baagee/php_QrReader
6 ^, J% a# Z3 [( X/ q% G
+ G6 J6 r! o* m4 _' b3 g0 Z1 v- 9 @- k0 X: ~* D
- $qrcode = new QrReader('./test_logo.png'); //图片路径
% x N& u. u* `
4 |3 X& ~/ V& b! t" M' ~' H6 ~* Y- $text = $qrcode->text(); //返回识别后的文本6 i" ?( O h3 M6 f( z* d
8 c3 s+ g0 Z9 e/ p/ J) K- echo $text;7 Q4 M# t/ V. q6 G* C
$ d$ h4 w: R9 R' p# G3 m; N" ^
$ e& H9 K5 H6 l3 B; P, s
复制代码 9 r9 R; P, [2 R5 A
链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7
/ Q/ t* x' e9 r" Z
- R/ D$ j$ E G
9 y, J! ^" m/ H& h2 [/ N* z L: [. w& q8 |7 c
. D t$ S/ H B4 r% x$ S8 U
* B) p/ I) q+ j6 `- l# p7 b/ d
# \8 d# Y* d" R4 J) p* K- E6 c6 x# [
1 z0 S- T5 n* v9 d
( X0 Z: D: j/ F. a8 h3 W0 S; E |
|