管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
8 z+ p6 N9 U2 d Z$ T---------------------------------------------------------------------------------------------------. u0 y8 O7 W2 R: T9 `
二维码的分类 S$ W0 i; O/ w( n: }4 M) i. y5 i
线性堆叠式二维码5 {1 n" k) W5 S: ^ w
# y1 J' X0 u2 M, {$ W( a7 }. t. j
矩阵式二维码" ~$ d, W- N! [. C0 |1 u3 {
$ a$ a9 i% K0 |
二维码的优缺点
# V# Z3 J1 |6 J0 K* g2 p& g优点
$ z8 q0 o- H9 \/ S7 h4 y信息容量大
6 z5 ]3 y( s l, E z$ K1 c% w+ T1 k6 [
编码范围广
) x1 j$ ]0 z# K) C+ x5 i% S
& b6 n# B0 Q u( q6 b3 U% R* V容错能力强
0 J1 N; o9 y9 {* c0 ^6 |- \* l4 D5 y6 P
译码可靠性高
& Q5 m# g! T" w/ Y2 M; d y3 y, n" Q) j1 h5 \8 H& Y ^ I
可引入加密措施
* Y/ l1 M! O7 e8 u) }7 J1 G% s' f; m1 I; j) D1 b$ R
成本低,易制作
: c6 R3 `+ k+ E/ B0 B% O$ e/ q) f$ B9 x- [; l6 {
缺点
5 F1 p, a) l% N& I- ?二维码技术成为手机病毒、钓鱼网站传播的新渠道
# d* ]. A# ]! A
* R0 \% b- a `0 H信息泄密
6 ]" ^9 ~% j2 g; i% T
& _! B0 Z) G1 z; l1 l& R% }, z目前流行的三大国际标准
0 D& o: v+ A1 \PDF417:不支持中文
. T P! d* }. J% U$ K5 J; I. x) W8 D4 p( J
DM:专利未公开,需支付专利费用
K" Q% o3 V' L6 N' O! t4 i J K" z! }+ s5 n
QR CODE:专利公开,支持中文
% O X4 |7 B/ ~! S( V: U& d X5 L" y" u7 W, \8 K
QR CODE 纠错能力& P/ I1 [* T. l2 J/ o! \ n
L级:约可纠错7%的数据码字! {' i) _9 u4 m+ u% U, x
* N, `" a" q6 D& c iM级:约可纠错15%的数据码字1 i3 C' C5 V" e4 f7 s
) Q5 P# X7 B% v- M/ ^: `# Z( \
Q级:约可纠错25%的数据码字" F/ d% ?, d' I% }) o% `2 p9 J, @
0 A% j- b) O6 v4 E7 Q0 h8 B: RH级:约可纠错30%的数据码字
# O$ }: U' n4 n7 _' h [
; G9 X9 c7 j' E9 c3 Q前提条件
3 M7 V! u) \/ F ~8 @* }GD库 B' g K3 k- R' x1 K+ e
' x; U2 T2 Y5 D# N
一、PHP生成QR CODE
. Q+ K1 h' I0 n5 ]% `: n官网:http://phpqrcode.sourceforge.net/
5 P/ |% C% @) A; `
$ k. Y* k4 Y. @8 O& |9 \下载源码:https://github.com/endroid/qr-code
5 P& j* v$ @1 R* m$ z: n7 ^
- |7 \( ?# ^9 e' N8 l9 B) U2 x目录结构, v1 h$ K6 U, k: ~* C' C4 d
. V- G& p! R: w! |' }
" C1 `1 `1 B& J) E- z4 c1 p2 n" O1、qrcode_create.php1 Z$ j) @7 Z- C( W7 S \
ps:生成普通二维码
3 A, i9 E8 G- X& x- ' N- V0 \: S4 T1 X, K) Y
- include_once "./qrcode/phpqrcode.php";/**
P% G3 y% o. R6 L. J1 V3 r
! A" l; l! g# E- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径+ x0 @. D `: R/ q( t& `
& O4 r/ h& v1 U/ X, w* \6 W8 [6 J- * 在浏览器上直接生成一个二维码(内容为abc)8 `0 \5 v H+ R; O& \5 _
- ( y3 R& S6 t, e- w: P7 S/ s
- */QRcode::png("abc");: W' b7 v: l/ X* |+ c
- 5 _* i9 v, }+ n2 V0 I3 ~$ Z
- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**
5 H+ d! w, \5 w! O
# i( h, }! R+ f& v8 {; H+ }1 B- * 生成文件到本地
- S" x' g% A: D" o
$ k. g1 h/ K3 `. Q! p* d8 ^- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)
& D; P: ?+ M$ w) G+ p - 4 \% h9 b% X- E' s! @0 ^
- * PS:$saveandprint源码的p6参数做了修改' Z j( o3 L# }/ ^! R% V9 @' B
# ^1 e3 M: u9 S# } X- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);
( J3 |0 q3 c' O2 ^/ ?& I5 E - / S( T' o2 ]8 U1 m, v* g
- : l, C% ?! J( [5 E- O
复制代码
/ Q9 S0 T- |) {2、qrcode_logo.php1 ?& M4 q9 j( T# K
ps:生成带Logo的二维码
/ C7 e" y. Y5 h- /** n) ]* a( z, X" |& J* T
0 s( S! c" x0 H) U# w; X* t3 @) T- * Created by PhpStorm.
# [9 P5 G! ^, p
0 {. {9 I8 v. z6 ^1 b6 x- * User: user+ V& t2 s3 y. k
6 \1 u% Z$ p ^3 ?$ f" L- * Date: 2018/8/16- @; X5 E8 H, @- l; C
- 1 B- \% V( [& G- w
- * Time: 10:436 k* z9 i8 r$ s2 E2 @" Z3 i8 c5 N
- , I0 B! ? \2 f) q+ q" K; g
- */include "./qrcode/phpqrcode.php";$txt = "测试内容";3 K# T5 w0 m. p2 ~! V0 q1 d$ L
- " T! d$ R+ e* U
- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称9 F+ N0 m, c+ i* W+ F
4 T! Y$ t9 x% B- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是4 M$ k2 K# f0 j
; n. k- O( q5 L$ d: I- $margin = 2;//边距0 v# k/ p O2 ~, S! m e2 W0 }
9 U+ O1 V$ T* g/ R0 t/ F% ~! j9 Z- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片
2 ^1 B# y- i; {$ O2 V9 e: ^ - . M. j# G W: \" W
- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){ % X9 g9 q; X# q( n4 ~( i4 u
- & b l$ B8 @" y6 `. f- G
- $QR = $picPathAndName; //已经生成的原始二维码图4 B0 L0 Q+ |- E. U( d% Q2 p
- 7 S# H7 d/ z1 F/ q% G" u6 c
- $Logo = './pic/logo.png'; 3 M; C. L0 z/ A. g4 r$ ~! z# b
( j8 Z L6 B' I5 a. U; a& q; L4 M, W- $Logo_re = './pic/test_logo.png';
* p6 p4 K# I3 H1 D% J5 Z
2 O' |" P, S2 ?, Z: L2 u1 M- $QR = imagecreatefromstring(file_get_contents($QR));
& a- x+ P& i7 s2 O2 O3 y* F
3 h d: N1 m/ B8 {: d% i- $Logo = imagecreatefromstring(file_get_contents($Logo));
7 p! `% i' }: }% S0 @- Y) ^' q! S. O - 5 d& k$ t" n F! X4 m0 {" x! s f$ |5 ]
- $QR_width = imagesx($QR); //二维码图片宽度+ I; ?, j: O2 i/ V6 w4 }9 K$ Q
; u# E: b8 v d* e$ P2 l: v- P- $QR_height = imagesy($QR); //二维码图片高度0 y3 `. n% m) c7 _
& J. J. t: u+ _! l+ p& y! o- $logo_width = imagesx($Logo); //logo图片宽度* n7 S1 F0 L" N' \' S
$ ?/ o7 p: q; R" s N- $logo_height = imagesy($Logo); //logo图片高度
+ x# n+ `% ^% X1 F- u6 D. C; x8 H! b - ! N- Z- @4 p0 p; V9 i* o+ U
- $logo_qr_width = $QR_width / 5; * i5 y4 S0 A5 }) m$ n
- / j2 ~. J, ~7 G0 S) G( o
- $scale = $logo_width / $logo_qr_width; ( X8 P$ c; O& o/ I
- 0 E" g- Y: u" m" [7 a
- $logo_qr_height = $logo_height / $scale; " q* B+ q2 V B- k0 J* f
- 9 e& N" z v# Y1 X
- $from_width = ($QR_width - $logo_qr_width) / 2;
: P& R! t4 g) `$ q* n) }5 T6 w - 1 k& a. L# d4 @
- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height); * L9 X$ @; V) _- j. l
: {' O6 h- y+ r# o- //输出图片# [, O- P. S( z6 |$ l- P$ [# b
- 0 y" W& b8 W& G: `
- imagepng($QR, $Logo_re);. @. r# a: `) O4 w% U) F, i4 J
- 0 E+ q3 D* ?3 O3 _! W! X
- }0 {2 ^% c5 d2 u( R
+ T( o& y4 L$ `% E8 n/ n
' n" _7 m- `% g& \9 h
复制代码 3、qrcode_vcard.php (生成电子签名)
! y9 n' i. L) P& t Q5 g" d5 a `9 a! R
vCard格式:https://zh.wikipedia.org/wiki/VCard' ^; S1 c6 l0 |2 U
) K9 Y$ H8 U3 F$ k, o/ m' p( H
* m3 j0 D( |# d2 F i/ Y- * Created by PhpStorm./ r4 }$ v V" n' h" u N
' A- N' N7 T7 o( U: R6 {- * User: user! X4 u B8 G/ \0 H9 O- L
- 2 X, _- K. E& w, M6 ^
- * Date: 2018/8/15
* n' W6 B9 {; k - 4 T x) d/ s4 B# J3 }" U/ q9 e% p
- * Time: 23:002 s1 S3 M7 F- `/ z
- $ u9 S: G* j8 |0 E( O T5 ~
- */require_once "./qrcode/phpqrcode.php";/**
& b6 K1 T5 j1 o9 j" N }- T$ t3 s
- {* H$ Z1 E) |1 u# x2 ]1 T- * 生成电子签名6 m, {- ]% S: A2 x4 n( H/ Z
- $ W" g* n! A0 ^ G! P$ A- W
- * PS;使用微信扫描二维码2 v, V r Y; q n9 l
# Q6 g( }" U& @5 c$ L3 s) t- */$content = 'BEGIN:VCARD' . "\n";//起始标志
3 H! S) G! j/ Y7 |5 G/ I" `# c
s- j0 s/ F% }6 H2 I: \- $content .= 'VERSION:2.1' . "\n";//当前版本" @* R& ~: t% y- H# r
. y" o' v, d& O3 N; v" `6 v- ^- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名
0 y! k0 @' i6 m/ R - - d9 J. ^/ z1 Z: w3 g5 j, W
- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称' N6 r& p- C% D
- 7 ]; n8 }7 k }
- $content .= 'TITLE:PHP研发程序员' . "\n";//职位: @0 R* w" Z, [0 x6 ^2 Q
& q2 C8 \ O; p I4 w0 `8 ]9 R- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话
4 O9 ]$ F k2 G r2 Z+ D+ Z- W. b - 1 P2 ` I' i2 P2 H2 K
- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址/ ?& s& j& E' T0 L5 J
8 W& o4 \. I) V$ D- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)
* u' d2 O( @! o3 y7 @( O - " H! n' N% e" A* x: j2 m
- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话
) R$ F% n$ ?1 a& e3 h
- A: D' R; R* o8 i9 W- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱' _+ J" ~& q. g1 @0 t. [* s/ p+ q
- 4 [0 y- M- l/ B0 c0 V2 T8 r
- $content .= 'URL:www.baidu.com' . "\n";//个人主页) p" x. U s0 R
- 0 Y$ H e; `' N4 H/ e k' r
- $content .= 'END:VCARD' . "\n";//结束标志
3 g; A8 [9 @( ]) d+ {
V7 A# K: r8 }9 U- QRcode::png($content);
- u8 [4 f: [2 R+ l( q) h
$ Q7 o) V9 H, h6 a. W9 }+ |* z- / ]5 [4 |' Q% ]/ L+ a
复制代码 4 X5 T% b( b+ C4 c2 v
相关文章推荐:! @# E& t9 ]; m5 F0 n3 ^) j8 V
1.PHP生成微信二维码实例
% E4 e( K' h9 w7 T2.php网址转换生成二维码
) f* c0 j e5 r5 ]4 Y3 z相关视频推荐:
5 d" H/ g8 F; ?- ?1.独孤九贱(4)_PHP视频教程1 m7 I) b& @* M) j& U" _0 j; V
二、JQUERY生成QR CODE. c, [% t0 w9 V! I9 M
源码地址:https://github.com/jeromeetienne/jquery-qrcode. u% A3 A, a# p% c& a
; v) z" P, i, ?$ ?8 m# _- D
jquery_create.php8 e" q. }3 w8 C+ z3 V0 O$ `
1 b, U0 }; g: ]! a" ]! J& c
- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码 ( L6 j. i8 r* q9 I' \, u% y% |
三、PHP识别二维码
9 }3 f! K- }4 W( r e1、方法一. ~, _% @3 s) v1 v1 S2 c J
环境需求,安装如下扩展
* {' [$ G& k4 d- ImageMagick
( t1 h% S/ K7 M+ i9 G- zbar
2 e, r* c8 T* T! e- php-zbarcode
# e1 K. N9 I) `
1 D$ |1 N/ o* N# {7 Q1 c1 C2、方法二
$ j% `7 s% n1 i( j+ [1 S+ g3 t5 }8 iPHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以2 S) k3 |% B( f; w) d
qrReader类:https://github.com/baagee/php_QrReader& q2 k* N4 ?" W6 N4 q8 Y# m! }
* R/ O( `( N- w: q, Z6 B- 9 b4 E/ x8 \$ N! Q7 R: u
- $qrcode = new QrReader('./test_logo.png'); //图片路径
: C1 B. d7 X; J C
$ V( @. O/ L5 E1 M9 A- v- $text = $qrcode->text(); //返回识别后的文本
; W) {+ i6 N8 H: a$ _: r! i
1 P1 @" k" L g: b9 O! x# o- echo $text;
9 b' G5 c$ W3 K$ E
( m! g( [+ T( ~) W/ d! [- U
! C/ B6 n* `3 G; `& _
复制代码
) W5 j+ m0 e8 N1 q链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7
$ Y Z: r0 k! [$ O0 K# { T: K! i3 P! C6 E5 c8 g
' h) H. X- G. \# M6 F! ?3 v
0 O2 L5 v$ g" y4 @. {- k
/ S: ]1 {6 E" _' J: }
. z4 j+ d- x% I6 j% z+ |' O c" B+ Q
, z& s2 m1 E, k4 ]% g; I
: |: W9 i3 j) u+ M/ x% P; X3 a/ u' k- x' e
|
|