管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。; O0 C3 G& w' v+ ]: N
---------------------------------------------------------------------------------------------------
2 z0 z; J. t; a8 N% `/ W: O二维码的分类
# i* S# p2 j) a& i线性堆叠式二维码' I4 _1 M: z" `$ ~5 Q6 F
: A& R2 r" Q) O: k) E/ Z2 z矩阵式二维码3 q- v" E) A+ ~/ Q. ?6 S8 l2 h2 s5 e- O. M
. x( j! a- Z* H+ r' Y) O! \二维码的优缺点
) f: r* U) g' |/ u优点% @# B. y3 \. E6 k- V% b+ a7 `
信息容量大
0 }9 @5 c/ l+ C: }# E( P
5 m6 Q5 }- A/ K% F编码范围广! Q# g# s9 [( F/ c- }, E
8 K# ?0 M3 F% m$ P# v1 n5 F, x( E
容错能力强) t5 b1 B: \( J) V0 a
6 T X. G0 a5 x6 Y, r" _译码可靠性高- l5 D( B+ {7 `. k# \' u# q5 ]
! s8 j' Y; ~5 a+ |" ^% F. \可引入加密措施
+ d/ ~/ M( V, u' c
9 `% Y1 r. X5 n( V3 |# I5 W成本低,易制作
6 `2 x5 X) _4 J% ?( R' r6 M1 N1 y* `3 H+ K
缺点
, h0 _3 ?+ H3 G$ T* L+ {二维码技术成为手机病毒、钓鱼网站传播的新渠道
' c. d0 ?: ^+ Q) U
+ M/ ~, ]. e+ n信息泄密
$ i( W* l2 S* V% n3 ]' [6 }2 v' l
目前流行的三大国际标准
' P7 C$ C- b' @6 TPDF417:不支持中文
& l0 ?0 z) ~2 E ]9 t5 W1 P% E# Y4 J# Q
DM:专利未公开,需支付专利费用/ \1 x0 `* }2 K1 }+ a: k) Z5 ]
) H/ W+ K' ?2 a1 u0 lQR CODE:专利公开,支持中文5 O9 b) y1 s, e% c
* J4 T6 G$ `# h+ U/ Y, \0 ]& \
QR CODE 纠错能力8 z% G9 w/ \; l8 U5 p
L级:约可纠错7%的数据码字
, s: T. c2 \7 }) f( @2 G
9 u9 ]; ]( b! L! O; s2 GM级:约可纠错15%的数据码字
7 I/ Q# U5 K5 v; J9 t! T4 A! t6 R( w/ r6 q( H0 O; u
Q级:约可纠错25%的数据码字& F, ?* e \/ N
( m) \) V7 C4 fH级:约可纠错30%的数据码字
6 A$ p' r8 D; _8 S/ F0 S7 U
3 H; B5 o) L1 u. Q# U. N9 d前提条件5 @' g3 d/ w5 ]
GD库
' m! s2 G1 K2 C" T& M Y/ ^/ F; z F6 ~* B! J) }
一、PHP生成QR CODE
! @" [$ }4 B; E+ R: A8 R官网:http://phpqrcode.sourceforge.net/ u; W# z* R3 [. C, j. L
- w* P. G- c S* m/ B$ m
下载源码:https://github.com/endroid/qr-code0 b$ j, \4 Q8 G E
7 q) t: }$ s- M. b. ?
目录结构, E& q: _# N( V2 ?
: }2 K' g: \, ?8 a$ p: f
. y7 n& s: N$ B/ `, Q8 n0 P
1、qrcode_create.php: B, ~( t) K7 _, |( ^, Y
ps:生成普通二维码
) D% v' x2 o6 D) v6 k, M7 G- 5 ~+ B, Z5 h" ?5 G
- include_once "./qrcode/phpqrcode.php";/**
) g. Q+ K6 d' y1 b6 Q- _% ]0 l
7 V. @3 N2 f& Q) x- s, o; o- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径
0 p1 a1 {6 v4 h/ c( y4 N# S4 Z
# O$ p3 m; K8 M& o- * 在浏览器上直接生成一个二维码(内容为abc)
; g4 w3 C% Z- P- W. @& ] C
- L5 ~* V8 P4 H- */QRcode::png("abc");
* P. m4 U5 y3 P. D! `) A
. F# T* b# w7 m- x! y2 L2 ]; E- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**; e, T. l, l" C6 y7 m
3 N3 [* i% w5 D: x& ~4 i- * 生成文件到本地* v6 q1 Y) m: o$ i: A- N" p
- & a( {" P) l% c0 d+ ~6 j' i
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印), k3 B% c3 c+ x! F+ \
W+ \* l+ s# y: s+ L, m- * PS:$saveandprint源码的p6参数做了修改
$ ~: a( g2 x8 J- I$ Y0 Z" Z' K
: Y* i: M9 j+ K' B+ k5 q- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);
5 ?9 o- v( |8 j) D* b. l+ O- A
! z4 x4 r; S1 X4 W) g
5 M4 h: h( M' e! O+ r
复制代码
) b' x) E( Q! G! Y8 E2、qrcode_logo.php; d- [# Z& [4 G) J- K
ps:生成带Logo的二维码
$ c) l7 L8 ~) F8 ~; T! S- /**5 F2 k: ]/ O8 z. ~' R! Y& [3 G
- ) c% d( A' i0 t4 }9 S. N3 H! i, o0 N
- * Created by PhpStorm.
T8 ? @' i; u$ ^ - 9 G7 s6 s& j. J' y' P
- * User: user
( v( Q# J% N7 N# w - . B9 R2 g7 R$ X
- * Date: 2018/8/16
( z6 {; p' ^6 C3 P
' ?6 e8 a6 a8 J- * Time: 10:43
W8 P: g4 y2 \* v% [9 n - * Y$ z0 E3 E) @8 n( X( h& \* Z
- */include "./qrcode/phpqrcode.php";$txt = "测试内容";2 G2 ^& E7 k) N) Q5 w/ O
3 t* f1 |! E. U/ [. Q6 A) X: {5 L- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称
! Y) I2 O. o, L' q0 C$ R
8 H: c1 X( h5 K- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是
! W; R& G/ O: C
" h2 h* V- e5 r3 [5 }# B4 A- $margin = 2;//边距
6 K/ H& }% D% ~: D
# \: P# i. g4 h+ Z- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片
' H2 J. o3 P# k0 K
3 y# k2 Y& L [9 t- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){
8 E+ f% {* k5 s - 4 e8 N( |# D3 a
- $QR = $picPathAndName; //已经生成的原始二维码图; Q8 n/ y/ }1 W4 X
- 3 R/ v/ |3 \+ Y
- $Logo = './pic/logo.png'; ( [, s! e0 V7 c
. p0 p/ `# @# Y, Q8 I) i- $Logo_re = './pic/test_logo.png';
) ~: `$ N& z$ `% H! s9 G - / R0 D) R/ C$ a! [2 p
- $QR = imagecreatefromstring(file_get_contents($QR)); + p2 { K+ x1 y! n6 i3 J9 M* C
- ) i, h# f. O# ~4 m, ^. o1 ~
- $Logo = imagecreatefromstring(file_get_contents($Logo));
- ~/ j1 @: u i5 B - - G3 @+ ~ }7 S6 d* t' ?
- $QR_width = imagesx($QR); //二维码图片宽度5 j: c' D2 y; S$ [
- 5 y f, j" N8 J X/ q2 \
- $QR_height = imagesy($QR); //二维码图片高度0 x0 Q$ |/ F, i/ \+ `2 V
% T3 S4 B% F+ l# I9 Y( I* W* A, K4 G- $logo_width = imagesx($Logo); //logo图片宽度
8 k% V2 b8 S4 N
8 `" Y+ o0 G, q1 G( m% ~) V: g) x- $logo_height = imagesy($Logo); //logo图片高度
( c& }' u3 I' V) O0 b" @# Z& o - , O3 Y6 u0 F x6 H
- $logo_qr_width = $QR_width / 5;
# y& L+ d9 q) x2 Z" P' K- V
# J* q1 F. u5 a- ^$ X' `- $scale = $logo_width / $logo_qr_width;
& z2 m- ^. F ~3 p% j# q# \; M* j. M) ` - 1 p/ A+ @8 D/ u- S' E9 X3 }1 n } e
- $logo_qr_height = $logo_height / $scale;
8 M6 x6 ~: w9 _: M' \+ j* [ - 1 Z- Q# j# e4 _: w( D
- $from_width = ($QR_width - $logo_qr_width) / 2;9 p& l |" t+ V. P+ {: o! D* h1 `# w9 y. R
3 z: ~' S0 p4 M8 x: `6 y- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height); ! h* B0 P6 ~0 b, t+ R- z3 |/ O7 J
2 M1 O4 w) N6 j, `- //输出图片* c3 I4 v. h7 t$ U
) K8 R4 U+ }" `- j6 N$ {2 |- imagepng($QR, $Logo_re);
0 X3 P, ^' S R7 a5 S, F
3 w" o! a4 ]7 E' N7 U( [- }
4 [) c! _8 T, O7 j& N
. Q; B) \* W5 M# S- ?- ( v0 N* K' u$ z& l! J
复制代码 3、qrcode_vcard.php (生成电子签名)
8 c+ V/ C! ^: h% i
; S/ \- M* S8 H9 pvCard格式:https://zh.wikipedia.org/wiki/VCard9 g3 u# ]1 y c+ n
o7 F1 s& h+ |$ j* C$ J F* E
- & s- Y, Z6 X0 W( }' k+ ^6 V
- * Created by PhpStorm.) L5 b# I. h% T( G
- - |" w, y" I# a! b- c! w
- * User: user
, J3 v* M3 a4 p& ]/ f - $ O' Z( q* a2 I8 [8 T
- * Date: 2018/8/159 l& A1 c0 ^/ `$ V" g/ D( c
- ; {$ Y6 l0 V' G+ l; s2 U6 }; _2 B
- * Time: 23:00& O% G4 R# x* k4 Y$ F
* B) C" t' C v# W) z- */require_once "./qrcode/phpqrcode.php";/**
4 d# H& f2 g, |5 x) U. q
/ j7 s# G7 U/ z- J. T- * 生成电子签名
+ b: p0 d% Y: `* P' \3 u - # W( U% ?# v# [ L2 s+ }9 b
- * PS;使用微信扫描二维码
4 S d2 e' |6 G$ N2 P" Z
2 ?! y0 a! p9 O( V) N1 I- */$content = 'BEGIN:VCARD' . "\n";//起始标志1 D" b( U5 |+ r1 n$ h" U1 q, m
+ S, A- M4 V6 L- q* a. m4 M( [- $content .= 'VERSION:2.1' . "\n";//当前版本
, g1 d7 T' c) S- I- ^
o0 I% `/ z6 K9 A8 |9 n- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名" y3 _9 y3 R, y
: _% |5 c% w! g( ^, K- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称
0 @; {2 Z: V# z5 j - 8 d& v9 L# p7 @7 f& g8 ^
- $content .= 'TITLE:PHP研发程序员' . "\n";//职位. F/ o3 M8 N) d( g8 J
5 A0 C6 h- o- d- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话- L0 o7 m" j6 g) t+ f" c
- S. @# W# e) N
- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址! O. ^! r# L8 R% L: m& u g
- ! O# p1 B+ V- b% y2 k
- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)
$ N/ M! N2 c- ]5 u - ! n9 R2 J' o, }- h: |: E
- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话" l! v \0 u, R7 l
- , f) \. s* J! N: A7 D0 m
- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱
+ E- [* P6 c( a9 J% ~
! {6 F" H9 G# ?: n/ {- $content .= 'URL:www.baidu.com' . "\n";//个人主页
) H: {2 o3 v2 K6 a
6 G4 _' W a( U- $content .= 'END:VCARD' . "\n";//结束标志
6 l+ O/ f( j8 ~) s) D: |& K - - S9 k3 {) _8 C. h. }
- QRcode::png($content);1 b, u0 w( Y- R* p- W. I W
- / M% X1 C1 Y+ m: l: ~- B
- 3 J! Z9 \; m! G( E
复制代码
5 _) F# [/ F2 \+ |4 r2 m! U相关文章推荐:
& w ^/ p9 M- b$ e' X% S) h/ J1.PHP生成微信二维码实例
" F$ }- @( r$ ~1 x2 L- A' y# [2.php网址转换生成二维码
* _! ?! ]* V/ K" U$ M, v0 a0 L相关视频推荐:
! f& E$ y3 w2 o" [9 |' M0 v. B1.独孤九贱(4)_PHP视频教程) f$ j7 p( T. o, ]0 P
二、JQUERY生成QR CODE
" W$ n9 }3 Z+ V2 U0 S3 l源码地址:https://github.com/jeromeetienne/jquery-qrcode
8 d6 h+ x( U9 D0 `
7 K% Z; G2 c f5 u. ?5 n/ ^( Ujquery_create.php: j1 d& L. Q+ b8 R9 `# N
1 ~: _+ @; T9 m; y- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码
- @: R( i4 [5 v! x3 E三、PHP识别二维码
! A7 i1 i# T% R; u. v1、方法一
! i: r( e: R& k; C环境需求,安装如下扩展+ n, t. W0 r+ L2 q/ Y$ S. J. b( Y
- ImageMagick
6 s% c+ M" J+ H1 H- zbar$ T# W3 |, d: u' Y
- php-zbarcode
9 N0 h* L. R e. f+ ~2 g b; x$ d+ I9 ^
2、方法二
8 x5 R9 w, F/ C' IPHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以
; a6 w4 i1 `- H9 s3 T% jqrReader类:https://github.com/baagee/php_QrReader
3 j8 L1 O% {1 {1 C, h4 N: ^
: r6 O& Y/ H9 P9 j+ I1 C- ) Q6 u0 C' Z' L, w2 _; C' ]" M
- $qrcode = new QrReader('./test_logo.png'); //图片路径
: _! J/ q" Q- r6 O2 C4 f
8 A. l9 @. U( | r- $text = $qrcode->text(); //返回识别后的文本 @: I+ x1 T" T& z
x$ j# w1 t' }4 ]; D9 \* n- echo $text;/ L0 k' m# U+ P! Q9 |# X
+ u, d# d3 F: F3 t0 n6 F8 A, D8 r
) E! D+ b% g# o/ E1 o+ n3 G$ l4 I5 i
复制代码
' @% ^2 M1 G. W, Y7 m链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7# _( b q0 R% L# x* q
, ^* o. q1 C4 f$ V
; l6 p8 U5 U f) b0 j
4 L. J9 Z( G3 n/ B5 h/ n+ s) B, c7 G' S6 g! W3 |" [ V: p
7 w; {; ^' j4 J# u/ g0 s& v: Z1 t7 g* e7 ?- x4 z2 g; Z
* B$ I! |" Z# Y- Q! l* K) n( K
4 d+ w# d. Z, {4 T8 f
# r# Y" `: q5 t d! m1 a7 M: ?* E( K
|
|