管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
& j4 L, \0 T$ X$ P" z---------------------------------------------------------------------------------------------------
8 P: ^0 `, z7 a二维码的分类
" d$ U2 ~4 X5 i8 f线性堆叠式二维码
" x+ B% y; ?; |5 i+ d, u
0 N2 g. A; Q* S6 d$ i7 ?矩阵式二维码' Z7 M4 [5 P% M2 n$ d
! V- b) k* H0 i9 d二维码的优缺点
+ L/ B# m; w! P: y7 ~* J优点. P! y: k* T0 s6 Z3 h+ L- u' R
信息容量大5 F7 V" k4 a/ Q4 z
# s6 }' Z6 v- P1 r
编码范围广
3 Z- t6 A( B1 @
( l# v* K7 h* d( b) g容错能力强
* L$ v; Q1 @1 r# y( Y/ l+ Z+ m- A# P
$ X4 j" E+ v' n0 V2 S+ o译码可靠性高
! q. v: E; p) U, R: b* o F# t9 c7 q. ~0 W% O) V# F
可引入加密措施
9 f0 E8 [* Y8 M. ]9 ?! l1 I# T" D' j9 i3 |, I
成本低,易制作
) D% E0 Y5 K( v, r7 ^& i: \* J/ q4 i1 z, G! B
缺点
: h8 f: F" O. K+ R& F) b二维码技术成为手机病毒、钓鱼网站传播的新渠道
% |' v0 @( O1 @2 A6 E4 b1 d) m+ ~: O2 D
信息泄密
" G/ |; }$ L% S, X. `; y$ |7 L9 ?' u9 E
目前流行的三大国际标准- t% X: f8 q) ]( y/ \
PDF417:不支持中文/ f4 w) \8 B: o7 A- C7 i: O N
* a8 F8 ~( D J- @9 O4 T6 bDM:专利未公开,需支付专利费用* \; \/ y r3 I- i: p+ i
5 k: F% m2 |5 MQR CODE:专利公开,支持中文0 H7 p* p0 q' b/ }- K, C: v/ K/ n Y
0 @+ Q7 Q8 m6 R" w1 r+ H1 eQR CODE 纠错能力
( o; V4 O) @# M( ~0 o7 t* SL级:约可纠错7%的数据码字2 ^. y$ G$ m4 R# ~1 a- Q
1 X& _5 q1 N: z4 }M级:约可纠错15%的数据码字
! t1 l7 s" g# j* c _7 ]' L7 O1 [6 x8 r) d1 Q3 o
Q级:约可纠错25%的数据码字1 x# P. }/ X0 I. X- H* `
& a: [ ^6 m! N8 V
H级:约可纠错30%的数据码字
5 L0 w7 C/ d. ?3 Z' f1 @ `& f0 q1 U- h+ Y e
前提条件7 u. \3 N2 s/ X# B
GD库& m+ Q; R ^- G8 g' e
* [% g7 i& o O7 H7 a一、PHP生成QR CODE
# z9 X( J6 W3 t" |8 E官网:http://phpqrcode.sourceforge.net/4 s7 S" ~- W$ |1 H% E8 R2 n
( Y+ Z2 }; r8 O* I下载源码:https://github.com/endroid/qr-code7 C7 k1 R9 `/ q A- A
* w4 f& m' o9 K7 N H4 h
目录结构
1 ^- O0 z5 P! j: O' f
5 u8 C7 f& Q2 A \9 k. p D7 n
4 f$ V% ~, b% i4 ?
1、qrcode_create.php
5 C% {# p1 a- m$ c. V( m- A( ips:生成普通二维码4 Y, h$ I0 f/ @# k; {( i' j
- 4 S! k# R2 H/ q+ n9 e, M$ L
- include_once "./qrcode/phpqrcode.php";/**
- S7 [$ m: K' i2 A* m! ~" q
. g r; R; w& b+ f: e- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径
# g M0 A4 v7 ?' [# Q7 V - 2 z% i+ j: K9 @" A. s
- * 在浏览器上直接生成一个二维码(内容为abc); \$ ]! a8 U& u- _; o' U6 g$ d
6 K- `' V: d/ @6 z8 p4 r. Z! n/ y* p- */QRcode::png("abc");
4 B% K0 O6 `: c' N
, B* ^3 a" x; C$ @; c4 Q0 }% D% }- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**3 B _# i5 U3 t/ G }6 \
2 a7 v7 K% R' P( o- * 生成文件到本地
, ?9 T5 }0 V [$ _. f6 Z - 8 A7 p+ m( r$ p; \ `" M/ ?
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)
+ W# \) R; \% e. O% f
( ]' b5 {0 q) \" ~% o# |- * PS:$saveandprint源码的p6参数做了修改) D4 F# I' n# R2 Q8 c! e4 U
- ]5 F8 p2 m; f! {8 \- Z# a' i6 O- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);
" ?$ f( C! s ]
3 y: x3 d) A F' P
& U- X; y% x; h# U
复制代码 7 d7 K1 V3 w2 u
2、qrcode_logo.php
m$ F) X& l \1 |+ }1 A" Xps:生成带Logo的二维码- + W1 r4 q7 N( A+ c i% s9 t, i9 y) K
- /**9 p( v& `& ~5 ?% N3 w
+ n; m% D, r; G- x% ^- * Created by PhpStorm.7 f0 I9 X+ f* R( C5 p
- 2 L0 K/ E6 t9 T* L! }1 y/ j
- * User: user
: F. b0 l1 j+ @/ f
, p; T$ I7 |7 h. i r" `, I- * Date: 2018/8/16
& Q& g! I. S) N - $ R- a6 t$ w1 ?4 ]2 o
- * Time: 10:43
! a, U6 a8 N; K& F1 r& A; U
1 t& D; d) m& z; s- */include "./qrcode/phpqrcode.php";$txt = "测试内容";% v4 c4 _% d" c( b* C: N! u7 o+ X
- / R2 }6 G& x% V1 B3 S
- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称' g. v" O: I' l1 t- d
8 R6 v/ j& C$ r- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是
- P+ s$ g: y7 u' R0 W; H& G - B$ p# l3 T( \& v2 v7 \# M
- $margin = 2;//边距
! h+ N* V1 s3 N& p( k- Z3 ^
; |8 l0 f" o: Y/ K( ~! D+ f- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片2 d- d4 X% m' t% \# _6 {+ p. x1 {) t _& n
- . Q1 ?$ E, W8 s9 x4 ~1 D- T
- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){
: a8 d" y& a/ z, F$ a - $ q& ?( V2 j) R: \. _$ Y
- $QR = $picPathAndName; //已经生成的原始二维码图8 ?2 u3 n; ?5 y5 w
- + m) L, `" Y& Z, k2 H
- $Logo = './pic/logo.png'; - g6 P" D- d, s, C, R% z( X+ J7 F
- + ^" {7 _$ ~6 L9 y3 A/ x
- $Logo_re = './pic/test_logo.png';
4 ~0 ]4 G* A/ c+ L9 {* s# i
4 l* B6 I- `$ E9 r4 D( Q- $QR = imagecreatefromstring(file_get_contents($QR)); }! h( o% A. z& q5 U
- & x8 a, L4 @3 }
- $Logo = imagecreatefromstring(file_get_contents($Logo)); # I) `: U% ]& m' x9 R
* @# B1 A6 c; J: K; d( t- $QR_width = imagesx($QR); //二维码图片宽度
# ~- ^- @, e5 H: ^; P - + w/ X: ?% W6 w
- $QR_height = imagesy($QR); //二维码图片高度+ ^$ o8 p- t; Q3 ]2 q0 ?' J
@& b) m+ ?# L; W* d* p. n. o3 D- $logo_width = imagesx($Logo); //logo图片宽度! X2 y- X& M- f$ G! z
- 9 o+ ~" n& R( x( i5 [' ?% {
- $logo_height = imagesy($Logo); //logo图片高度- w1 U* [' L7 M$ r0 S' E% H
- 5 [+ N- q: d* ^. x3 o6 \0 i! H% C
- $logo_qr_width = $QR_width / 5;
' {% R D$ p3 {% s% _0 T G
$ M6 c+ M: [" S) o4 e- $scale = $logo_width / $logo_qr_width; $ T0 G' d$ P, R$ m% V9 P
- 8 ^- J. D& a$ f9 p( V- u6 X
- $logo_qr_height = $logo_height / $scale; 2 ^: x+ h* r/ D& @) _$ @) e! J
+ j6 V5 y4 m+ l6 E0 ]7 ?- $from_width = ($QR_width - $logo_qr_width) / 2; [ \1 k9 N: l; y
- & ^/ i0 h2 r$ g5 v1 d
- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
8 ?% t, D! \5 m9 ?( O
$ L+ s2 H4 g+ ^: t( c* H, r9 s- //输出图片/ S7 Y. b% ?+ [) A7 ~* ^/ J4 Y
( l# i# D1 V4 D* E$ @5 Z, a: y: ~- imagepng($QR, $Logo_re);/ C" v) g, O7 N2 L7 q. K( x
- + R1 q& a, ?2 g
- }* {" k& ~7 t0 [/ {+ H( Z/ ^" }
- 9 U, T. K/ |: x0 C, P
5 G. C' f3 W' i D1 k! X6 }
复制代码 3、qrcode_vcard.php (生成电子签名)
0 w7 M* @% W$ g! T! L3 Y' E
, l% a: V( [$ |2 A3 Q8 kvCard格式:https://zh.wikipedia.org/wiki/VCard6 y4 O0 l, n2 ~- Q9 {9 E
- d5 h! ]1 z8 m2 R
5 Z7 g1 {& d$ T4 t! q5 P E1 h- * Created by PhpStorm.8 ^$ P* o( \& D; L# X Z
5 ] J1 ], Q p. P y) V1 m# |- * User: user
( p4 R X' t, J3 s - 7 \( t1 r ~3 G
- * Date: 2018/8/15
/ R6 P0 U) s7 e' z, c - 0 P+ z) A, O/ _7 \
- * Time: 23:00
' `: s4 ]$ o2 g; N+ Z! f0 A
- L8 u# V: K: Y' u2 V- */require_once "./qrcode/phpqrcode.php";/**) {3 ^$ A0 B4 j# f* @3 ^1 G
2 O: Z3 R' Y. t t- * 生成电子签名. B3 F1 y& E; M9 [1 k
- 5 u& A: T5 U& a# l/ Z- V3 a( f
- * PS;使用微信扫描二维码6 \# s2 A- o4 l( h2 y
3 b/ U, }9 t7 T& A- */$content = 'BEGIN:VCARD' . "\n";//起始标志$ ~* E& Q3 W A3 E: r j
- 0 b5 w5 L5 G" @" B" j. f
- $content .= 'VERSION:2.1' . "\n";//当前版本
0 G2 r* z0 w. T2 ~& x
3 i( d/ `9 p2 p7 _8 S- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名1 a# }. r1 V! z
6 _9 R, l" A3 @0 }, Z# v- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称
, e' N/ L3 Y: M7 i8 |
. ?! k7 j3 }: E! |' g% @0 E- $content .= 'TITLE:PHP研发程序员' . "\n";//职位
' N! k& Z% n" Y W" v
- W5 ?! ]& ? z' E! l/ ]$ r! L- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话5 C( U$ u r) t
- " C" ~; G9 X! U2 } I% N
- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址" k5 }- ?3 g( c# F) `, R+ |
- 7 V+ d: i) E+ l* Z8 K
- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)! T8 C# g; {/ c# ?& o R2 t: S
- 7 y, ]$ R2 W; D. E7 i4 C
- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话
7 g, @) G* `3 u, F; z
# E# x) M& c2 Q- `" Q8 P- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱
) o9 P; U! c9 z. p. w/ I, n
2 A0 Y2 n2 f: p8 c' b. \( e! R- $content .= 'URL:www.baidu.com' . "\n";//个人主页# C# g* b R5 p" L
# l8 G. q6 f4 g0 C; x% O, F! [- $content .= 'END:VCARD' . "\n";//结束标志: ?4 v! q" R4 m! `: T0 F; f0 M1 b
2 j6 \! p* e1 @* U, Z. R- QRcode::png($content);% R- b v7 W3 v0 B. R% ?9 C
- + O" ~ q4 H9 z- v8 n5 b
- ; Y+ k! J- v( w! T, |* `
复制代码
1 \' ~) W A* d: n相关文章推荐:
$ K+ M1 b" {; E' L' T$ x1.PHP生成微信二维码实例9 [$ d D) ^% ]7 b( [
2.php网址转换生成二维码2 ]9 H5 ~ x* i* E4 f
相关视频推荐:
4 R/ {- C1 r5 A% l; R1.独孤九贱(4)_PHP视频教程
. \! h" @/ j/ P/ a+ a" L0 l0 f+ I5 O二、JQUERY生成QR CODE+ {( q& [& R8 }6 ?3 I6 p. U
源码地址:https://github.com/jeromeetienne/jquery-qrcode
1 |9 h! g2 D- \ \) M& J
0 a0 d$ l* { A; V. Q# cjquery_create.php4 Y+ ^) y' x9 M e
5 x& M1 x+ q* L- a Z p- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码
; A0 m* ~* W& i" I三、PHP识别二维码% W+ V2 i+ h: P8 b* G7 I7 }
1、方法一9 I# Q1 G' I! M: C. v5 g3 |+ ?* E
环境需求,安装如下扩展' ~8 Y" q# Y7 T6 f. J2 U6 S7 Q
- ImageMagick
# B6 y/ E3 L* c4 W- zbar
$ x: B% j7 N0 ]& a G J% N- php-zbarcode' C1 k$ y( f! d: T
& J: G9 G/ }7 d0 b. b+ v2、方法二5 k1 @' I; |, ^/ X
PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以
# z3 z3 N9 b( Q1 u4 U+ k; i( vqrReader类:https://github.com/baagee/php_QrReader
' |4 t' ^" V! N+ `( J' M8 q# B3 x1 Q' r& r* R
" g+ R4 d5 ^3 I# F9 ]- $qrcode = new QrReader('./test_logo.png'); //图片路径
9 G2 O. }8 L* n" d; w7 A2 t6 E' E
" M) t) {! P3 |$ j$ ]- $text = $qrcode->text(); //返回识别后的文本% i1 V% W' E- f+ B% b
- $ o8 V) `6 @5 M+ v4 m3 e% m
- echo $text;: g- k" G+ w% ~ c. s4 }8 R% A
- 9 C2 R- C8 [+ N
, ^) m$ i# ]# M
复制代码 / G n' q2 U1 S
链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7
7 c) Q3 Q+ Z j A: B; e! F T4 t, y( D) m2 G$ _6 a' r
6 `4 t& A4 D6 [+ \$ r5 j! F% Z
' v p- ^# H! ?5 J+ {0 B3 M* B4 w* ]
2 u/ T# L; g' c
9 u7 a7 S! p# d) i2 O3 P. Q V5 s9 C. @% f9 X/ a% x
9 T, M3 j# |8 p0 h- ^: G( R$ k9 M
0 O7 z- v* W/ V/ b) ] |
|