管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。7 u, I% t5 h; X6 ]- x% `6 q2 q
---------------------------------------------------------------------------------------------------
7 Z& z. l, l0 y8 X+ F. S二维码的分类
% P4 \7 i& O3 y, N线性堆叠式二维码
U1 Y+ q8 m0 ?: }/ P% M! z3 e7 p
4 M+ z9 V3 e1 L矩阵式二维码' `" b# {4 V2 H( O* b
4 ]5 [4 L# Y' I1 _! o' Z二维码的优缺点
3 Q! C+ ?/ T9 y. W W优点
8 F5 {- S% e0 ]7 `0 h0 }信息容量大- z3 q( L2 x1 S/ q
9 h0 y* a8 ]1 L- d编码范围广
, r' D. O/ y9 U
3 ]3 u( O) i- [ ?; y( q容错能力强. w* d+ U/ ^8 V, Y5 L
* Q# a) f. `; t译码可靠性高( Y. n- m6 n* Z/ J4 Q
( j1 s" B" V3 z. K! ]/ e可引入加密措施1 W6 c8 s/ T! `
# h8 a- \- z9 F2 F
成本低,易制作$ L, z! g* n4 F4 y* ~; P
5 n' R# F5 l# L( d缺点
) ]( o! Q7 n& F$ \二维码技术成为手机病毒、钓鱼网站传播的新渠道
% o% Y5 R4 p l
) y; L8 _% Q( x5 i信息泄密" m2 E3 F9 b0 _( k
, g5 B5 n% M( c8 j- d目前流行的三大国际标准, v) m9 z* b6 ?
PDF417:不支持中文7 ^7 h: S5 D3 |) `
4 G6 U: i) V: g# |, KDM:专利未公开,需支付专利费用, z- q) O) Z* P
, y9 s/ I; _7 D6 [: D
QR CODE:专利公开,支持中文 a$ C, i9 n$ T* Z* H; \4 ]
$ {" n+ o, {; gQR CODE 纠错能力
* X% E- E, d' `# S2 [ kL级:约可纠错7%的数据码字
2 Q$ j1 N7 d( E; |' ^" q- `# B* y6 O/ N4 e: n
M级:约可纠错15%的数据码字
; y2 _: j1 b9 E2 B. o5 m8 s$ A' V8 Z1 {6 O
Q级:约可纠错25%的数据码字5 I' |9 u, r# H" s, j7 Q% q$ z
( v9 [2 @; U& v+ a3 v6 h# g
H级:约可纠错30%的数据码字
* N- m3 J; p# H2 Y& ^4 T5 I4 o$ i9 x$ ]& h2 o# I7 Z+ p
前提条件" \$ F1 t u o" v: m+ ^ \7 c
GD库9 j7 ?# k' D0 D3 J
. v" [& r' ^/ K7 P, ]" R一、PHP生成QR CODE
) w" ?. T- C8 S$ Z0 z: D官网:http://phpqrcode.sourceforge.net/
& I4 ^# z, T* @+ A. J9 a' ~8 g } s8 z& x5 @& P# ^
下载源码:https://github.com/endroid/qr-code
0 V# G, w% y5 ^7 G# c3 }7 u: A0 i
: I' c# `" a' r目录结构
. u3 I% ^( T4 Z( d+ r- f; j1 N N
2 b" P5 Q; C: X: U+ l# F
: r4 L6 J2 t$ o, H1、qrcode_create.php
- `/ m- D; L1 @- Yps:生成普通二维码& q: J# G+ b+ ^) i/ Z
- & V3 N: M8 D l0 Q S! @/ x. g T4 N
- include_once "./qrcode/phpqrcode.php";/**7 F3 j# B% X; z8 V9 F
- - J W2 [7 R8 b! A
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径: M( Z7 ], D4 L/ C. M7 @# E
+ f% o: X/ z' b& F* d7 ~, x9 N- * 在浏览器上直接生成一个二维码(内容为abc)+ ?, k$ `) q# V& l+ e, y
; r; w2 q+ V- F# X- */QRcode::png("abc");. a) L9 a$ R! q
: u3 D. G# m; t- ~" n/ }4 Z- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**
* u8 }0 c3 d+ W% y: y' e - ; H1 @+ i5 U+ }1 {' G$ i- \
- * 生成文件到本地
0 p( E4 E/ M# r. n' k6 ?
6 J% F& ?. a- D2 o% D" B8 I+ l- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)& |* Q8 f' e+ K$ }
- / w8 Y* E, I9 A$ z2 j7 H2 n/ [4 [% v
- * PS:$saveandprint源码的p6参数做了修改
" Z9 _* o3 k4 v0 q/ M
& z* X# i) R" s- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);
5 K9 M0 f/ Z& I1 M- E' k+ l
" i" Z- [+ a6 ?1 G- * I$ b2 b- Q5 M" [( o2 k
复制代码
2 x) l* x/ x) s: ] _! Y2、qrcode_logo.php7 @" u7 S4 p4 u- Y* s
ps:生成带Logo的二维码- w8 z: A! Y, `2 G' h3 N0 R, N
- /**
1 E+ {! X! M# D, g$ v- P
& E' y1 @) X9 k' G6 A4 k- * Created by PhpStorm./ o, G* s( _( }# X; a f
- ( f: k% U# R% n' f6 i' @
- * User: user
# P8 {' v1 T( {* }0 J
' I- e4 `2 G6 a- * Date: 2018/8/16
% c+ \% n. \6 m( N( `1 g. ^8 t8 D+ G. F
4 T$ a! c1 U! u9 A( J/ T- * Time: 10:43, x1 S1 f) ^4 Y" N4 w% w0 q9 l# N
- Y O. | r; X
- */include "./qrcode/phpqrcode.php";$txt = "测试内容";
# C5 ]: e7 c4 r( K& D - : P0 @* P# @& v* K9 W& D
- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称2 j% I1 ]2 Z' o+ H* I2 g1 H$ }0 Z8 K
9 t9 A! W5 [5 e4 o2 {9 |- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是
# }! \2 j/ d$ u" d
/ S- t& e' C' p, F% I/ X1 Z- $margin = 2;//边距
r7 Z* D7 |/ X$ z$ r. ~7 z9 D - & l! [$ w$ c' W
- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片
- z/ u9 }+ t% y: y - $ X! S1 u! ?. S8 i
- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){
; n S3 S! [1 F$ t& `; s* w7 @# e( H
6 B5 O. i1 Y9 N x. _" F$ m9 m- $QR = $picPathAndName; //已经生成的原始二维码图; U% n9 k1 `/ ^" s
% _. |- Z( D& t& K# M- $Logo = './pic/logo.png'; - `: T, s: Q4 p
- 2 M; I2 V" `0 |- v/ S% ^+ P- Y# J
- $Logo_re = './pic/test_logo.png'; # z% i( G: N+ p; e3 A- E" T7 P! K
- - W" e; F" r2 ~3 K) B$ U
- $QR = imagecreatefromstring(file_get_contents($QR)); 3 ^3 f: w; ?$ M# l0 `( V0 a- r2 V$ n+ F
2 t) d: C% H* z; t2 I- $Logo = imagecreatefromstring(file_get_contents($Logo));
6 E& M) e* }1 O* u - $ p8 I! \: l( R) h& a# E. A
- $QR_width = imagesx($QR); //二维码图片宽度
( L5 F I B! z9 @% d2 G! @ - # [. @$ }" v% H& s7 ^7 E% z+ D
- $QR_height = imagesy($QR); //二维码图片高度; d+ z5 ^. {# y0 `0 e0 S
1 ?9 J3 w* Q* }, Q# S/ `+ {+ A; q- $logo_width = imagesx($Logo); //logo图片宽度9 O' O# X! l5 T+ b0 {+ V; W
8 \" b0 X8 z& U z- $logo_height = imagesy($Logo); //logo图片高度* M7 x" b- N. P$ q4 L$ h$ a6 t) q
- & s5 X. i6 u( s7 s. A+ h2 ~4 D4 R8 W
- $logo_qr_width = $QR_width / 5; . n& `4 n% j% E+ a! d, V
8 i1 X$ ~; C( A+ r; W, c- $scale = $logo_width / $logo_qr_width; 4 l8 o8 U* [% z& m) N( U
- 9 j1 h8 p% u' X$ h" E6 r
- $logo_qr_height = $logo_height / $scale; / I w+ g; v6 F0 l/ o
" v, A' x$ t" S. ^$ ]2 a: p: h3 H$ @- $from_width = ($QR_width - $logo_qr_width) / 2;
3 B7 p- V8 m( Q% V9 m
/ ~+ e3 s- o w& J- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height); # M/ S; j4 G. [$ ~, ~" k0 j- L
q( f! x1 m6 `" C! `' }- //输出图片5 d% n5 |. b' }8 R
# I# Q# u2 s( z/ y- imagepng($QR, $Logo_re);8 H. m6 S2 W- s# Y/ H: `' \
4 s$ {1 M" k8 _. ~) u2 ?/ n- }0 C9 L( n# h' G7 ^ }& W
- $ c2 h3 a- ?- b0 G
) q9 [4 R1 C. O/ X1 K: d
复制代码 3、qrcode_vcard.php (生成电子签名)
$ j) d4 k' l: C3 O, v, X8 \: q- n& D+ L7 ~% I0 W8 n
vCard格式:https://zh.wikipedia.org/wiki/VCard) S! d: [3 r6 P$ ^0 F3 V6 m% D
8 A. T' a9 r! o$ {
- , R% E' z# F+ K, _) O4 c, m+ }) {' X' R
- * Created by PhpStorm.
H) q9 `! d7 D& S1 W8 } A5 R
+ D0 g* |2 _9 p4 a1 g( @- * User: user U: i0 v" \/ w7 o) `1 g4 ?3 S
- / F; j P0 q2 S4 ] W4 c
- * Date: 2018/8/15
+ Q- U5 T' k u5 K - L; h. a7 w0 I8 t a" Y
- * Time: 23:004 l; m. b0 e4 m! m
- 8 N. Q8 o' B% w$ j1 s( e1 x
- */require_once "./qrcode/phpqrcode.php";/**7 z2 x3 r. w) ^" ?/ H2 [
: T2 V0 R, W: d- * 生成电子签名
}* H7 x/ \& t$ A6 p
' S i/ u! {3 r+ ]" s- * PS;使用微信扫描二维码
8 `, k7 D8 ^5 z9 e - $ O' x/ ]* k8 ^1 {' v
- */$content = 'BEGIN:VCARD' . "\n";//起始标志
. B: N" U9 R9 j4 K8 Z4 o5 t - + m9 l/ i. U3 c$ H( f
- $content .= 'VERSION:2.1' . "\n";//当前版本" e U& v4 A9 G/ E. N2 \' R( |
) E7 c) Q9 a2 d: k- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名
4 s8 i, K$ z+ @7 A - 8 c; B5 a! U- x/ F/ n; }
- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称6 @( e8 K _7 E# |8 K
- . V) m* g7 C6 Z! u$ n4 \* |3 x
- $content .= 'TITLE:PHP研发程序员' . "\n";//职位% E; ?1 C" @) j) |
+ h @% i3 A8 H9 y$ E4 A! ~) }- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话8 ~- g U: q, D7 T( h3 l
" A: _" { {4 Z. s: A- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址2 T. k! |8 e p7 m( y6 x9 N7 D
- 4 G! F5 _2 q& w5 K! e* @
- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)
4 C6 c$ x+ }1 Z# l: l$ K3 c1 E
7 g$ a( ~6 r! p+ J- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话& R0 u L5 K* B, c0 {3 B
3 \& J/ c, n+ M0 ~7 Q* G- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱
( Z$ f- i) o R o
! k/ s# ?4 c2 W4 y! K- v+ B- $content .= 'URL:www.baidu.com' . "\n";//个人主页. V+ P5 J4 r4 B8 Y
- 8 |" Z+ H; Y* V: P( \2 \7 t5 r* d
- $content .= 'END:VCARD' . "\n";//结束标志
# M0 T: e" N, @5 ]: W( \. k3 `
/ S* E# F) y8 O- U" v- QRcode::png($content);$ V. s2 x, U7 A* c
) X5 g: [+ J4 C. H: n# V- ; K0 \; y" Y/ b/ M/ y6 _2 O1 G& ^$ S
复制代码 ; ?" m( o' P6 s/ D
相关文章推荐:1 i; ?8 J4 }. W: y/ b$ s/ j% L
1.PHP生成微信二维码实例
( B% O7 K) [7 q3 }4 j& B2.php网址转换生成二维码7 g$ V F% |0 _* W
相关视频推荐: Y1 v9 H' f. @1 g+ Y
1.独孤九贱(4)_PHP视频教程
9 }- t! i0 p, \9 h/ ]- D( W- W二、JQUERY生成QR CODE
' s* D/ z! n O5 R$ g& E( W: t源码地址:https://github.com/jeromeetienne/jquery-qrcode
! H' r$ P. S3 B$ G9 S% e9 O& p1 z, g9 r! ~ I
jquery_create.php7 z% e1 }3 ~4 Q) {
% H$ e. ]# R2 n9 g4 d6 [; L* Q9 B- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码 2 j3 a7 L6 i' ~6 Z5 l# B9 k
三、PHP识别二维码
& `# \' @' |# z5 z1 l1、方法一
/ v2 V3 I4 _) `+ E8 g2 f. e环境需求,安装如下扩展
6 q5 E6 x8 g1 D* D- ImageMagick
. D0 C- P8 J( y; @) Q. A) S2 C8 ^- zbar
* B5 i6 W5 G7 ^3 v0 p; l& K v- php-zbarcode- v( @+ Z' Y; i0 C* L% |. P
# }! i5 l, l5 P+ `1 d* y2、方法二1 q! G4 x$ n! z" E+ y; w' _" a! f
PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以( n5 m/ g& T. p, D- _: j
qrReader类:https://github.com/baagee/php_QrReader
) ^) M* t3 ~1 {! p0 f8 g1 N9 p( ~) A, _* T7 C! D% b+ Y0 |; e6 o
& C0 v, G! Z# y- $qrcode = new QrReader('./test_logo.png'); //图片路径' K5 y; ]0 E/ }3 E
, K' k. }, K$ _+ I" f- $text = $qrcode->text(); //返回识别后的文本
3 E' R, I% c R0 d- _
* l2 G' j, u- T. Y- echo $text;9 K- V5 C' `8 h' I& m
- 5 o9 ]! x7 r" ^7 ^7 C, I4 a
- / y" N- _6 F" }' O8 r9 P
复制代码 4 K; |3 ~) i. `, U& ]( u
链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y74 C* d# K v4 o* a
c! _$ h( i* f) H( U" |$ [( M0 n' ]; }
S0 e) c9 h- \! Q4 }
" W% s4 D8 _$ q$ l* _) @) k( ?) K F- c' i* ?
) `2 S, G7 n8 l2 M
& r1 g3 H" ]1 q# ]! d' [- a2 a3 ]( L, k& O
7 F5 `, L: n5 {$ L |
|