本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
5 N4 [- E' M1 p---------------------------------------------------------------------------------------------------3 k) Q1 N% Q2 ^
二维码的分类
( D7 e: W9 B$ Z. Q* G; @线性堆叠式二维码
2 N9 K% T( ^( U0 W; j
' q+ o: e" z, \$ ^; p* u" k矩阵式二维码
% D( K+ U6 i3 i1 ]5 D/ `6 E) L/ M1 d+ `
' p' T$ W$ Z8 t4 T% P二维码的优缺点" r2 i7 r0 W" s
优点; j- n2 V$ K( k: n) a
信息容量大+ p5 Y0 n5 J1 ~% L$ f
% p6 p" f5 P$ m" d; j5 H" h' |编码范围广
! p' {. G, H2 Y. P" P# f
0 _; g+ X, z0 h' d; F! ?容错能力强$ @5 w5 x+ g' o5 U0 W1 D! N
) G" i* G( {+ Q( n# y& n0 h
译码可靠性高
( f5 ?# ]$ k% B2 G1 L' f5 s0 k6 x5 x' t. w. a* @3 q
可引入加密措施4 a! x$ J4 ]9 B
- F1 y4 z* E% F: T5 S成本低,易制作! |- _0 L% W, S+ q0 Z; U
2 S- J( ~0 G, o. p2 L4 {
缺点0 N# r3 D$ r3 P( ?/ V9 V
二维码技术成为手机病毒、钓鱼网站传播的新渠道
- `7 I3 ~9 y, z( U" Y: e+ h( I" T) B- d
信息泄密2 `, l1 v% z+ W, G" \& `# t
, h$ r/ t- Q0 H7 N" h) `# g' w1 M目前流行的三大国际标准' q& A# A. M4 N
PDF417:不支持中文
) v, k/ l5 F1 |9 }
9 p9 D- s% K+ M4 @7 vDM:专利未公开,需支付专利费用
' [) _ l O0 E9 j+ r7 j
9 ~' T; H2 o6 n( H. ]7 kQR CODE:专利公开,支持中文# g; h- u# v9 E6 _% h6 c- f0 R1 n4 R# H
) a: b$ j: C( M+ oQR CODE 纠错能力
: y; D& y. F ]/ p" WL级:约可纠错7%的数据码字3 ?( w; \9 {8 F
, M& f( n& S) v
M级:约可纠错15%的数据码字
/ B; a: ^# r$ C. y- A( K% i/ S0 Q9 B f: g# h/ g9 K" p" ?
Q级:约可纠错25%的数据码字
: t$ x* n$ X5 g1 m& c
' y0 Y# {3 w3 P: F G0 T5 BH级:约可纠错30%的数据码字
- f: R9 v5 k; m1 {
4 Z; O% ?) w. E# b n( N n前提条件* }0 }3 G' [* `( Q7 \9 I) o
GD库
! u1 m6 Z0 f) f6 T6 F' s5 ^+ N0 C8 K8 I7 X+ R
一、PHP生成QR CODE
* N H9 G! P' _1 M+ K官网:http://phpqrcode.sourceforge.net/" M. r6 s' `: M3 x- l" d( I
% S4 ]% X! O/ @# V$ t/ R; O
下载源码:https://github.com/endroid/qr-code1 ~9 x8 i+ h$ H J
. z4 d* h1 T$ _ l目录结构
3 k2 O, I6 n- @+ B' E
# E5 v4 K6 z1 R I9 _$ s
& \! v5 O2 J! A4 @8 [2 K
1、qrcode_create.php
( n1 n+ M% ]. E' x! m G' ~ps:生成普通二维码
h; I$ D6 c H- * N. m. g- i+ u. U
- include_once "./qrcode/phpqrcode.php";/**$ o" [) j4 z4 b* j8 Y( i
- 1 r& ^: f) S" X, f. l3 C
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径
2 o# G, i. X. u - / r1 B8 A3 ~: w$ |/ X' z0 P
- * 在浏览器上直接生成一个二维码(内容为abc)
8 V" u$ z6 ~: v; Y& z2 T' t' ^& w
& G2 D* [/ j6 m F/ F' k8 m- */QRcode::png("abc");
3 K' Y. e y, I6 v ]. } - % G5 j6 }1 k6 Y" P
- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**+ ?, A9 A& I5 D) \4 Y( m
- 9 T: l3 Z, O' r) P4 V
- * 生成文件到本地; ?$ \3 p+ `: m+ w
- 6 D4 Z. w9 c q( S8 q# s
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)
, |/ u' f& P1 d9 S
$ w/ D$ \0 \) g7 h- * PS:$saveandprint源码的p6参数做了修改2 W0 Z0 a% I8 K/ E; ]: l Q. d9 h
- . u1 ^5 Z' K" R7 f
- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);& ^: n0 \7 G" v' S& z- }) O. i
3 {3 y# X- E7 s# R9 o6 d" ]- ; w7 B& e- L5 W. L/ ^ E0 W
复制代码
& C- }4 Y8 X5 u! f! ~0 \( s3 w2、qrcode_logo.php
' {: k9 [: j6 ~ps:生成带Logo的二维码
+ \2 c: M L+ s4 i- /**4 L1 K, Y/ W }. _5 C I, x
- * ~8 C, F, V' r5 l
- * Created by PhpStorm.. e8 V6 ]3 q5 y
$ H7 M7 s8 U, Y' x& l9 q: L r- * User: user
( t8 l. i) `8 P6 f \ - % R: g6 }+ h- E/ A% G3 E7 n
- * Date: 2018/8/164 j5 w; b( O$ I# v9 q# Y
- & O# {( v6 c8 ^$ w& [% T- D r
- * Time: 10:43
2 H) _& z0 l3 P1 A - . ~: q; y i* J' a& Y3 u$ e
- */include "./qrcode/phpqrcode.php";$txt = "测试内容";
# b. h7 V1 n1 `+ P
' N4 C U6 u' u' }5 r, i9 |- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称
, R. u) f# L9 `, Z& {: \; L& _5 W - , z& J9 v0 P$ F
- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是
V$ d6 ^6 T0 r2 D" H. S% \ - 6 w- ^4 Z. R2 w* e( ?
- $margin = 2;//边距9 X$ j; y! O5 V/ n
- ; a: ^7 d5 A$ M- d! G l! Q9 j8 l
- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片9 ^& X# q$ b4 g o, ^4 p, ^
. i# p8 v2 s) `$ c9 R. J8 Y- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){ 1 t. F8 [& N7 {/ |/ `
- 9 w+ X5 G5 P; _" d
- $QR = $picPathAndName; //已经生成的原始二维码图' g& y+ Z( v2 ~8 v1 U. z. g
6 I! B& s5 S8 l, K- $Logo = './pic/logo.png'; 8 j8 [- |' `8 [* W' P
/ F; r7 A3 [, \2 i4 j+ l- $Logo_re = './pic/test_logo.png'; : L% Q7 s( C0 ]/ g% T! }
- _4 v8 Q5 V3 l8 H5 c
- $QR = imagecreatefromstring(file_get_contents($QR));
& u- _2 X" |# h5 [; N - 8 ] P# M" T* _0 a
- $Logo = imagecreatefromstring(file_get_contents($Logo));
8 V8 M! j( d- m& m1 X# b - . ^ R* l) T: @: j* h
- $QR_width = imagesx($QR); //二维码图片宽度
2 C/ F8 K5 m2 H" n% p( P: C
) k' z# k3 V: x. Q, I, d- p# |- $QR_height = imagesy($QR); //二维码图片高度
/ w, J8 Z" U5 \1 w
3 x, J8 k- ~& a/ c$ T& [, \- $logo_width = imagesx($Logo); //logo图片宽度
2 J- Y" f' n6 i" E! t1 g/ } - ; P, L$ s9 s$ N) C- E/ n
- $logo_height = imagesy($Logo); //logo图片高度# l9 h& x9 l2 Z3 u: N) i% x$ h" o8 k
- 3 `( \/ E W1 T1 w9 {+ T
- $logo_qr_width = $QR_width / 5;
% x( h% D2 V8 L1 Q6 M7 l& @8 m
! o) U b; D1 [, O, J+ c# q- $scale = $logo_width / $logo_qr_width; . Z4 R" q, [+ {9 e3 J1 n' d0 ?% S
- ' ^# {, {/ v2 x0 l7 V$ J1 E9 ~0 Y
- $logo_qr_height = $logo_height / $scale;
; L! }2 ]% r/ j, H! } - . R. v" G1 [8 {) C8 J9 F
- $from_width = ($QR_width - $logo_qr_width) / 2;
8 i) H0 K% Q3 i( j! C, V - : K% Z4 K- H6 k" p5 r, X- q
- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
+ A0 k$ W: r3 T1 R% E5 A. v - 2 j2 }. v2 h( v$ i4 X. y
- //输出图片" Y' o4 I4 a& g5 f4 A( u6 ^1 }
6 p! U* {$ f# k2 N2 q/ ^, }- imagepng($QR, $Logo_re);* P4 h' g6 v9 V, E ?3 @
- C! d8 Z# {- ^- l
- }" c; q6 w2 ~# ^: X
- ! h6 I R( X& A* k1 q& c' m2 Y, a
- - b0 h* {0 k6 C4 r& G H' r% s
复制代码 3、qrcode_vcard.php (生成电子签名)! P% Q p, @2 A% S2 Y- j# ~
+ O; z. w2 c% y/ ?% I- s, [
vCard格式:https://zh.wikipedia.org/wiki/VCard$ m$ B- _/ T5 I
8 y- {& ^9 \' b
( {$ v! g5 _) ]- * Created by PhpStorm.
. i. g* d$ ]; m- c - 3 @' c7 S& {( |7 k+ D" R/ ?
- * User: user
9 d; B) _4 I* R; o/ c9 J1 ?" s - : V, {) r3 k# O F5 [! I" T' \
- * Date: 2018/8/151 V) w! f9 h4 j. l# u
! X3 k$ U8 f* s" P0 J& N# Q- * Time: 23:00) B" K" O: M8 B: j0 t' c" D8 i7 o) Z9 ^
4 P3 c3 x+ @* } H% w) Q6 n9 ?( S F- */require_once "./qrcode/phpqrcode.php";/**
1 Y, D- {8 H" k0 x* C - ! E! C; x5 \, v# O7 l& i- h
- * 生成电子签名# R# V! r$ ~: ?; r
- / ]5 |% T4 @5 ^
- * PS;使用微信扫描二维码) c4 h9 z2 O6 h( f# E
- + I" F) w# ~0 ~, F1 q" h
- */$content = 'BEGIN:VCARD' . "\n";//起始标志
3 @) ?& Y# r& d/ r* ~2 w! i
7 v! [0 D' l0 g& C% v- $content .= 'VERSION:2.1' . "\n";//当前版本3 W/ z, p S7 E3 b* t
! j) ~8 x3 d9 S' d. b$ K2 @- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名
0 _; T+ L3 j1 G1 y- ^: m - $ P& k" v* i. g2 m1 r
- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称0 B1 d1 \6 l: _$ q+ |* t+ q
A% T u0 P; B' G) m* h- g- $content .= 'TITLE:PHP研发程序员' . "\n";//职位
- f8 C+ z! d* t, }4 ~. I
5 _1 L# a8 R5 [' C1 a4 Y- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话
V; C3 W4 P7 Z, { - $ i& t. x0 x, _ S3 c
- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址5 R) r0 x- R+ z8 i) i3 z/ R; {% u
# z+ u# c' S% m8 q/ ~7 i8 z- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)+ B$ o8 K2 |# I% a# l/ H2 @# j! u" r# v
- % S% |! N7 p" Z( H, {9 l* Z
- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话- y/ ~ l0 Z* M2 k! ]
- ' v/ | g0 f+ ~1 _; R
- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱0 S2 |1 Y+ G# F" V/ G1 M
- / g6 S, H. y8 w# H& j/ Z8 b. ]
- $content .= 'URL:www.baidu.com' . "\n";//个人主页
; A2 L: j! ~7 C
: M' b! w* U+ S% Y8 L, z5 j5 O- $content .= 'END:VCARD' . "\n";//结束标志1 Z$ X/ R1 x- ]- P
- $ C+ R- s. L5 C( O6 R
- QRcode::png($content);2 w$ B, \1 K. q9 h/ |% \& J1 s
* t# N: g5 B5 r% d" d- - v: i- B7 u/ M" U6 C1 p
复制代码 # l2 f! b- S8 f0 J+ X c5 `) |
相关文章推荐:
) j* u3 L% j. A- y' ?1.PHP生成微信二维码实例, f, n6 j/ x; n" ~- r
2.php网址转换生成二维码
' p. q& M, e5 S9 g4 n' j相关视频推荐:1 {7 z4 r: v4 V" G$ X* Q
1.独孤九贱(4)_PHP视频教程
1 t( b/ U- m; K1 m' \二、JQUERY生成QR CODE9 Q5 b- s# T2 b( E! E
源码地址:https://github.com/jeromeetienne/jquery-qrcode& L; W7 @4 ]. w
* U5 Z: O+ ^& S
jquery_create.php
1 E+ N- o- u/ V1 g( S1 x. }# t: K+ I/ i: G; n8 E- C/ h( b0 D
- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码
5 c# H$ l, r% i; D& I- g三、PHP识别二维码# \9 a2 q' J* _# x+ D
1、方法一% l3 @; d1 ^& b P
环境需求,安装如下扩展
( g# w, I( w! K; N( _- ImageMagick
, C" r) y R) {: a- zbar! e Q3 L7 @5 S3 o
- php-zbarcode! W; F) }; p( x; i- N6 J6 Z
" W0 L1 U8 k* i- C3 o2、方法二
3 p4 x; r% i6 @) s( ~PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以% Z' f! z! E' X9 |
qrReader类:https://github.com/baagee/php_QrReader0 s! H; ` u. f0 f' o) d0 Q
9 G! W. B @# R+ `4 F" s/ X+ e- 3 a1 b2 T O2 o: Y
- $qrcode = new QrReader('./test_logo.png'); //图片路径
1 a8 X% T+ k+ W2 O; a - + B. J" B) M0 Q4 ^
- $text = $qrcode->text(); //返回识别后的文本
5 u9 V6 I: c. `. @ - ' e2 x; q* V% i
- echo $text;
, H' [/ g! p3 {% @: y! s
8 {- q* r& |% B# T% [% \. d- 6 |$ @/ E4 X; l. G/ [
复制代码 % I" l7 R* s& T4 ?
链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7
' o$ d- S5 T% d' J" J
9 w0 Y$ u) {' }3 Y' N7 Y5 s" _. d" X* i% {7 b
9 D2 Y5 y* `/ \- z" O k4 i: n' A
6 z7 \2 C' C d5 d9 x: ]$ H( H) `4 W7 ^. `, k
A7 D* O# d; a5 C% F$ m4 M2 e9 ^, g# r9 G4 j! j
1 A+ E7 y5 @# b1 V% M1 h0 W |