本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。$ V; l9 R- |) | A1 f
---------------------------------------------------------------------------------------------------' z) }+ E8 m! n: M) X' Y( o; b% p
二维码的分类" ^4 y) Q6 p4 k6 C9 D% S8 w
线性堆叠式二维码, Z2 `, r0 B( |8 U9 B5 ~5 i( ^* W
$ N$ R" ^' y' j+ L% I7 i, i矩阵式二维码- A' ?' u; z5 _
, R8 G9 f3 T8 t) n! s9 k, @3 V4 Z二维码的优缺点
& V7 S5 J) C; @: I' k' v6 S优点
% S% r% g. o3 ?9 C8 [) |信息容量大' h5 k6 B$ t/ P8 o& r; n
x/ J, ?# s b% f- W2 C+ G编码范围广
% \. S- a+ T/ L8 h M. B# U6 q) V- u% H) m' h1 d& a
容错能力强' E% C/ ?9 _5 Z' k/ J6 t
) P2 W' ?' I. s- C- F
译码可靠性高( j/ m8 Z6 b6 V% i% g) @6 w+ r
5 k( L' ?) g- p8 H1 V7 J
可引入加密措施
]9 C( S7 f$ I9 U. h) n H
6 R$ m7 w- f# h) d6 a成本低,易制作
( ?6 ~+ G2 \2 Y# k
8 n" T P) O4 r缺点
1 ?6 ^% N# p: ?7 ~- `# a二维码技术成为手机病毒、钓鱼网站传播的新渠道" z- i7 x5 E: n, F2 H) Z
_+ a' |0 H" q& B8 L9 S4 r; L2 O
信息泄密
5 m) e c1 e+ c' [
0 X: E+ x ]. \9 n! @3 X6 n目前流行的三大国际标准% O; }- k- w6 ^8 y3 W" p
PDF417:不支持中文5 u7 S! i! k) e% Z$ r, o
9 V. ^3 a7 j3 V4 {8 oDM:专利未公开,需支付专利费用
# B3 I. c1 F7 @- D
/ P7 t2 I3 g) q6 [7 MQR CODE:专利公开,支持中文- s o( y, L( e. P2 O
& S. `' P! C# T1 e# E2 m
QR CODE 纠错能力9 a+ G9 A) Y4 j4 v* m, U" c
L级:约可纠错7%的数据码字# U; p$ e* m: r1 W" c3 H( P, `
% M1 `- Z/ C; I& LM级:约可纠错15%的数据码字
) U; b- b4 G2 Y# Y9 H1 d4 o) R+ _0 Q4 D% t% d/ I, I' D
Q级:约可纠错25%的数据码字
A) y- c* t# ]! {% T1 h k) m- Y7 n& ^' a9 |/ C! ~" Q% F
H级:约可纠错30%的数据码字8 C5 w& @ v' f% D
9 g% U! o+ S, M8 I4 l
前提条件# |* j; b1 E2 v, k8 d3 ]
GD库. V q" x$ \9 j* v1 _5 B. h! V# j
! G0 |/ s, @1 r4 O: D% s
一、PHP生成QR CODE9 n; W: J% j; q6 ?+ L, ~
官网:http://phpqrcode.sourceforge.net/
# \; H& u% a! x; ]) ^
9 Z; ]" `' x9 x! w+ m下载源码:https://github.com/endroid/qr-code
! j4 j4 U% }: D% P1 ~/ r1 r$ E$ P1 `+ b) J: H1 \) d
目录结构% W* O, {- `8 W
+ g* l) s. m1 ~- f4 X$ e2 d2 Z p' `) |( j6 P
1、qrcode_create.php
, \. x% ~9 E' E4 H5 p* `ps:生成普通二维码
9 y8 O- Y5 X1 K* m6 ?$ A- " Q9 h* \; G% {, ]
- include_once "./qrcode/phpqrcode.php";/**; Y% r. e1 E) G3 D& L( I
$ O+ W( r7 V% v: p6 V+ W- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径3 `) y0 P$ h) Y U
- ?$ h! [& H8 y# @: O- * 在浏览器上直接生成一个二维码(内容为abc)
* Y# P6 R! B3 A( d
7 f" d6 u6 O# X+ S+ @5 E) z- */QRcode::png("abc");
$ T1 Q3 w) ^9 ^! q& ?) N
4 r5 R/ u5 g. a- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**
0 i% m/ R" d( X6 o* r% Y L
4 {( K+ c: m" Y- * 生成文件到本地
' \6 ?5 C; J% O, K/ Q3 j$ u - $ G1 f1 L' ?- @- }- O; `
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)
. {. C+ h; F( R! @+ k4 r8 l
7 j- a8 H9 e7 h- * PS:$saveandprint源码的p6参数做了修改( Z; ^+ x4 Q& H$ z8 X$ V
- ! ~; s8 E" ~1 e0 S7 x
- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);
* H3 D! ^7 i2 p! ~7 O* j# e0 Q9 g+ h1 \ - * U9 { N, R+ ~
- & }: |8 i8 f: z- ]
复制代码 5 {8 \; y" Z: r7 A
2、qrcode_logo.php
& |: N) b% j9 _ps:生成带Logo的二维码- # X" D/ a( r) f, j6 P# B& b
- /**
8 v2 \& z! P( h - * V) H6 V( \3 E% t
- * Created by PhpStorm.
" q+ R8 J7 ?; L+ O
8 J" J$ I& K& Z# c) U w- * User: user
8 G$ A( [. Q8 i/ z; \* G# | f - ' t: c. j4 J! ~6 g
- * Date: 2018/8/16
2 |2 H1 y; b0 X4 A7 f# @0 D
- D4 U% y/ M% K3 P2 ~- * Time: 10:439 S1 J8 M& s+ ^4 |' g2 s. U9 p
- % J5 `: l" V* F: r$ \# g- Y2 |# E
- */include "./qrcode/phpqrcode.php";$txt = "测试内容";
& S" I% s8 n3 R- S$ b0 u
* F2 B! X0 q8 Y) L9 @, y( d- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称
6 ^, p" Q3 k+ X - - ]' o1 D5 S$ K* S8 v' v$ k
- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是( D! I+ b# C( z' j- b3 U. L
; S- C% l: `% F4 ^" O. m6 |- $margin = 2;//边距. Z( P; @8 i: n2 D, u* y
- 9 E4 i" S$ a* O8 C0 d
- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片 l0 o! |7 Q8 {
3 q! }4 L _1 v- z- C' ~$ n- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){ , S3 D! V9 |/ O9 G. G5 ]
/ D% c' q* x, i& H+ Z- [4 p- $QR = $picPathAndName; //已经生成的原始二维码图4 Q8 }+ a" D1 C+ W! B# G1 g
- ?/ q5 k* `, O2 t2 _: f
- $Logo = './pic/logo.png'; 1 F7 q0 A( u0 y. N- x
- 7 ~+ z" z& O0 t' o% \: R5 ?- W+ f
- $Logo_re = './pic/test_logo.png';
# x9 n. z9 J4 |' f
8 B2 K8 W+ J2 R# b- $QR = imagecreatefromstring(file_get_contents($QR)); : V( g8 R. a. E2 j" O) _
- + A7 ]8 k6 S* K Z3 l' |' a6 A
- $Logo = imagecreatefromstring(file_get_contents($Logo));
; U8 H6 G: Q7 A8 k9 R G - & O/ c/ b& D% J0 G% u6 n& q
- $QR_width = imagesx($QR); //二维码图片宽度
1 e" D5 q( E6 c - 0 J8 T4 {) U9 q1 ]5 r' S* G/ T
- $QR_height = imagesy($QR); //二维码图片高度$ i2 L( C5 i, b9 ^
- ; t+ R- L6 p1 i/ j. X7 Y
- $logo_width = imagesx($Logo); //logo图片宽度# _/ o' i, m. b' i5 f- y1 j
1 {9 e' m8 s' @- $logo_height = imagesy($Logo); //logo图片高度: W% h! o- F' W% v& {0 R
- + l. _( P: f7 P' }! L: u
- $logo_qr_width = $QR_width / 5;
' e8 ~. ]7 o( r- i- t
& Q0 f: R$ C4 f8 o; ]7 K) O- $scale = $logo_width / $logo_qr_width; * I# l; Z/ R5 C0 Z$ Z0 f. E9 i
5 k# D1 c! F- q5 C O- k. F2 m- $logo_qr_height = $logo_height / $scale; " Z4 I6 k! h6 T0 I7 G# Q7 ^
/ N8 V# a6 _, O$ M- $from_width = ($QR_width - $logo_qr_width) / 2;4 {1 C" r6 p$ ?- {: q
- ; g& b9 e% J3 C; _' `
- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height); 8 m( C7 b6 B$ s/ L! \
- Y$ u' M' z" T7 a0 _- //输出图片 ]5 C+ z9 {/ o5 q
- / J% x, E5 [# E
- imagepng($QR, $Logo_re);
2 ~2 S( G8 [% ~3 a& ~, q3 Y X
8 H, R+ {2 P, x. Y1 O# e7 r- }2 s8 S' O1 X+ w5 d2 h
- 2 d1 b. O5 d' z, m. h% z5 k# Z
( h7 f. T% }0 i" g( L
复制代码 3、qrcode_vcard.php (生成电子签名)3 R* e4 i& C v! E. A+ d! ~5 e
; Q# t0 F" b' K* `/ OvCard格式:https://zh.wikipedia.org/wiki/VCard
% I7 B: f" K, o0 C
7 U8 q9 S% [ G+ X7 I X- @$ Y
' G. W6 O( s% z5 s+ H7 a+ Y" T- * Created by PhpStorm.
! u3 w# \7 {& ~1 \% g) }% W$ D7 `# e- ]
3 M" H; X/ [ |4 D0 c- * User: user7 {2 d! N. u% u0 ^3 `+ H
2 n, P' o6 _& _! `6 g/ x3 I, `$ n- * Date: 2018/8/15
! ?0 c' E- L# Z1 s2 E3 R& ?! l% d
1 V% T0 @9 U/ z7 J4 Q' m0 ?- * Time: 23:00& z& z+ u8 c/ s5 W
- u4 a, J5 D' b+ G' E9 u+ y
- */require_once "./qrcode/phpqrcode.php";/*** ~! `( V- k( Y' ^% l, g
/ u, l1 Z0 {9 C& c& X' \- * 生成电子签名
/ |: E$ A8 z; r: I* A
4 g2 k* B! \% j ^- * PS;使用微信扫描二维码2 b1 |6 y I0 E7 m# a
- # j7 Y6 N' p, A; j# ]% c
- */$content = 'BEGIN:VCARD' . "\n";//起始标志
9 Q; e& w P5 |3 W/ U - 4 X0 ~0 Y/ S C4 D! P2 F! p, j2 `2 }
- $content .= 'VERSION:2.1' . "\n";//当前版本- L9 s! ~ b8 Y1 Y* L/ e: `
- j$ g* V) A3 D. t w0 y, x; B
- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名3 T- C: [ [# m: k
- S2 M3 ?0 H; ?! e; a- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称7 F3 W( n) [0 W. }- R& Z5 G& K7 Q
- K7 V5 H- v) k7 T- g4 I2 [
- $content .= 'TITLE:PHP研发程序员' . "\n";//职位
, K: m% \5 M7 l& | P+ Z; f
9 \2 S) X; _: R, @# p4 w$ }* d- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话
: C1 {. z# r' k# q0 C' `9 t4 S
$ i3 N _' y! H b i! T8 X* e- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址
. g) P, f+ O) |6 o$ Y+ H; x - + y! U# k+ F# J6 C% n: i/ e
- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)! F4 H" ?( T6 [ \
- + [, v4 H1 K" ^
- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话+ j$ q0 d0 t8 X+ ?/ q
- 2 r; n* Q7 c( H- J
- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱
( z! j) F, B( b
1 E2 [3 x7 ^# ~6 C0 l- $content .= 'URL:www.baidu.com' . "\n";//个人主页6 ^, K- W- G2 m/ ?! t6 z, A
- ' @7 N: q( e! f- ?2 P! i7 t Y
- $content .= 'END:VCARD' . "\n";//结束标志3 |! z9 p0 ^) u+ K7 f
- " _6 f, }% o1 b# `# k- y6 {0 D
- QRcode::png($content);
& e+ ~# p5 U# P6 Z& D7 \- K5 b - 2 e( S4 A$ o) Q% Q0 s
- ) N, I @8 k. X4 ~* ?( s( ~
复制代码
5 w) i" N# a S6 S6 K相关文章推荐:
3 Y3 j; ?) Q+ U0 l* [" D5 t% v1.PHP生成微信二维码实例
: q/ V i: u4 m! h6 B2.php网址转换生成二维码" [& r6 f. ^+ Y8 |' }$ D
相关视频推荐:+ \; t) ]' o2 O* n. Z& o3 S
1.独孤九贱(4)_PHP视频教程- Z. I4 ?- {( G; N; x0 K
二、JQUERY生成QR CODE
5 @" _! Z4 V- [# l. D0 T0 B8 c源码地址:https://github.com/jeromeetienne/jquery-qrcode5 Y% {- B' N8 t! m5 i& L
' w* e0 G! B) C K
jquery_create.php
+ X4 c" n3 ?$ V4 _1 h& r7 d- a8 S; R/ o, {; F, {
- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码 + F* h. O% b! M( E* L
三、PHP识别二维码
% A& V$ y) N6 c* O1、方法一8 ]' { \/ u! v T
环境需求,安装如下扩展
- T, c, Z% e8 D7 g7 ]4 b6 y- ImageMagick
: j; U7 ~ }, m5 d2 }( q4 U- zbar
/ F# T3 J- [! W0 G: i- php-zbarcode
7 s8 R& s7 b: \
+ K3 i& s( X& G' p. a6 |2、方法二; ^1 Y# L& } q" l* o6 |; ^$ u
PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以
2 y# T# {- I/ J3 Y4 X% j/ {qrReader类:https://github.com/baagee/php_QrReader8 v4 C) p, p. Y
N" a; {7 u6 F8 o
- 8 x( {: l4 V9 Y0 a
- $qrcode = new QrReader('./test_logo.png'); //图片路径8 ~- A1 E1 Z8 H! c% I& }
: P0 X4 N9 S V- u- $text = $qrcode->text(); //返回识别后的文本
# i- |' a i" S8 u6 w: S2 F - ; ] B% ~# } ]# f2 R! \
- echo $text;2 h" R1 ?+ c' n' v0 ^
- : k( p9 t7 n0 S y% c* ^$ a, M
3 R) L( ?. @7 w% O. {
复制代码 # }6 f/ k, ^8 X. } T7 O {
链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7
4 S3 F+ J0 N& [# s) p$ k+ j+ A. C. c1 z6 p
s% d( i# N, R2 A
2 E: z7 e3 }, Q. ?7 k# J0 |" q
0 a, h3 T, B1 e1 G3 ]
w5 B6 n1 d* P3 D; ]6 n, J( G/ r# m: M% c
5 I) b1 b$ C Y3 V+ V. y+ a" O& D8 x& }6 W0 Q0 j6 p2 W
& R" w0 M6 r4 c4 m7 Z! T/ g3 G
|