管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。' I* f% @$ n0 {/ Y2 `+ I
---------------------------------------------------------------------------------------------------: F, s% P- b5 a# y
二维码的分类$ \" [% y4 I' |& y+ d
线性堆叠式二维码
0 A3 o+ R1 |; e0 J" v' {5 A0 m5 }
1 [6 t% ^7 Q3 H( W矩阵式二维码
" o1 B& w1 J8 |3 w8 L, a, W" E0 i2 O$ j* C7 I/ _
二维码的优缺点
1 {; S0 Z( y, w# e9 B优点
5 r! `# A7 l6 A$ x( ^* h3 @信息容量大: M# b5 u2 d/ s0 P. _/ s
, t5 L* H) O/ K% o7 _6 ^编码范围广
. v/ }4 k& H6 Q( u9 R4 f) c
% ~# M2 X8 W! R& ^$ O- l* Z容错能力强
# @* z% T' N3 N% j/ p+ N( r8 G1 C" b3 z A, x
译码可靠性高0 u* D% A4 R: u1 {
) D- K( I; r# ^' Y! r1 y可引入加密措施+ A9 x' } i7 V$ |/ f5 f) y$ l
. q1 ]; s9 {% X1 k8 f成本低,易制作
/ R; F) W# R, L! o9 `7 U- ^, \4 N( f# L9 l: F2 @7 H
缺点: D0 C8 }; W2 u/ p! s
二维码技术成为手机病毒、钓鱼网站传播的新渠道
6 I. G( y0 N" J) y. J" O/ Z1 `. i' v8 u' q, I ?
信息泄密9 y$ m7 |3 K) H; @' b; o
% ~, s2 A) U w/ e) ?
目前流行的三大国际标准
1 w' I$ m" \& I+ U' C/ ?% LPDF417:不支持中文) e. e4 p0 l5 F( o
/ Y2 z% x% }. c1 c# xDM:专利未公开,需支付专利费用" ~5 K9 q7 g% R6 n q: N7 G g/ |
. h# Y P. ~% PQR CODE:专利公开,支持中文
/ A. ^+ u+ n$ N& Q
% q; w' Z W1 s: g- B$ K8 ]5 TQR CODE 纠错能力
* ?- _# J( E5 i" I3 F! S/ k8 NL级:约可纠错7%的数据码字
) k. M. P* G& k( {7 F# w
9 S* F8 I/ h$ v. t* c5 r/ KM级:约可纠错15%的数据码字
& M: s2 g! ]& N) s" X8 A
* U1 U( H2 U9 X$ h1 r) ]4 Q s- J7 fQ级:约可纠错25%的数据码字
1 s9 H! w/ L" Y1 t# x8 ~% r5 }- {. X9 l
H级:约可纠错30%的数据码字0 }! G5 e3 U2 r* k/ @7 b, H
. o) B' {* |9 H* ]8 v
前提条件# n' N% v- W' S8 S2 t2 p4 e" S
GD库" h" g0 {7 i1 P8 r
5 }- j& w- T; t z8 R u, Q
一、PHP生成QR CODE
0 c2 E) d' X9 j# a8 Y7 u官网:http://phpqrcode.sourceforge.net/
* H* n6 B( y: e& {: W6 f; O- C- P# i: g& p( }0 _$ H; H
下载源码:https://github.com/endroid/qr-code; }8 A" c7 K- N) q& ]
( a0 G3 [. V4 R8 ~% \目录结构
5 M% a( \- q( E7 I" G
% I3 Y$ N, n0 p$ l3 R
$ b# ~1 T9 U% d1 m
1、qrcode_create.php/ z$ a7 {& w: b" U8 @8 g# L
ps:生成普通二维码
9 D/ R0 v0 z# ~
p& k- o% O. [% S; N8 p- include_once "./qrcode/phpqrcode.php";/**
/ M$ J9 Q4 [( a - 8 \7 o3 w8 l/ H D8 w
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径
8 u* v; ` u/ M$ U9 o+ Y
2 n( }9 w0 U0 o$ f- * 在浏览器上直接生成一个二维码(内容为abc)
3 @ M9 ]5 k% D2 p4 Q/ Z0 ~* K. W3 E3 i
3 b" _* {" |8 d) T- */QRcode::png("abc");' V* m C& `2 p& Q0 a0 J
3 k: J/ c- m0 ~$ \# h2 B1 `0 ^- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**
0 R' g- s) x, W& G% C$ `7 L - 2 `$ v7 r9 q- k9 y$ t; \2 a' i( J: I
- * 生成文件到本地3 ^5 @/ A! e* Q4 u9 ]) L
- ! u' C' l# K+ H+ @4 B- O8 R
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印). c' w- |! a# e6 W( t$ T
9 f5 ^8 o, a t- * PS:$saveandprint源码的p6参数做了修改$ Z9 i, K" O2 Z
- : Q$ ^2 q1 q4 K$ l: r! r
- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);
) s! Y9 g% k1 u# \ - ) P' A1 e3 Y O* B& x9 w6 u
- & F) ]0 I1 [* @' i0 l
复制代码 7 U1 d: ]* X7 Y6 K
2、qrcode_logo.php; w* f8 V/ q, L, l
ps:生成带Logo的二维码- ! V j8 }, E& V6 U! Y
- /**; w1 w, F1 D. o9 a, A
+ v% }2 @' } w! W& x+ f2 `0 ?- * Created by PhpStorm.
& w/ ]# C2 _7 G7 ]3 S
8 m. b' q1 [6 L) k% R& B- Z- * User: user
, L7 `) r8 _ H; ~) q* `6 c7 M1 w
0 g V) @4 k. E0 D! y% S- * Date: 2018/8/16' x6 e: W% @' @2 G
- 6 p7 U6 l9 B$ l! z% C6 e/ H2 l5 v- `
- * Time: 10:43
8 n) T4 q( G; d; F4 H s9 \8 h - ! {+ N$ H/ ]& D; m4 D
- */include "./qrcode/phpqrcode.php";$txt = "测试内容"; O( m# M4 I0 U
: {$ B3 Z F4 O' Y9 M- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称
2 g# u3 w4 O( M$ ~/ W1 Y8 `& z - 8 J4 |; ]3 q( v: v: g+ e7 `; q
- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是3 A0 O2 f+ p& f0 f. N
- 1 N8 p7 m0 G# G. k+ G
- $margin = 2;//边距( ^; H- ~- c* e5 ?( n$ T7 @
% k1 I! D/ W/ B' G- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片
0 Q. |0 P4 u* z - 8 x. C3 [: I) F* Q: a- K
- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){ 4 e$ {7 X0 u6 m+ J3 M" e" e
- 5 W/ g5 P) X0 |5 Y5 C7 _
- $QR = $picPathAndName; //已经生成的原始二维码图
" A0 f. ^7 K, x- U- k H4 z
1 ?+ x K. I, _0 \* s! J! ^& ~- $Logo = './pic/logo.png';
; m6 i! n4 I4 f' j! q* J9 u
, [# y3 P* |$ N4 j0 y2 b- $Logo_re = './pic/test_logo.png'; " P9 L& ?- b% s% _4 z
4 D/ \& p2 G+ o7 t0 K W- o- $QR = imagecreatefromstring(file_get_contents($QR)); 4 G5 \* n! T4 Y, G1 f
) w M( r8 ^! H D" R {7 }- $Logo = imagecreatefromstring(file_get_contents($Logo)); # o( a9 s# m4 M( Z1 f2 l; g
, @9 x+ r& d q" U/ y- $QR_width = imagesx($QR); //二维码图片宽度
5 K; n* f+ ` A6 |, e - / L0 s) Q8 V* \* n) U8 g# Y
- $QR_height = imagesy($QR); //二维码图片高度1 K3 x% y. {! p# _) J
- 2 G1 o$ ?7 q- S, o- x6 P% d \
- $logo_width = imagesx($Logo); //logo图片宽度
/ Y; ]1 K: u! g# l/ K H5 q* ]+ `4 R& g
# n+ W- ~& y( g' w) y* ]- $logo_height = imagesy($Logo); //logo图片高度' f' [# F" I E
7 O% p3 U7 l& d, W* h2 [! E' {" W- $logo_qr_width = $QR_width / 5;
/ a) ^, E& I7 ^9 | - " m3 M7 s- }! W" H0 n, v
- $scale = $logo_width / $logo_qr_width;
2 j1 [- \4 Z; e2 t( _1 ~* t
1 o5 Z. Q3 F( X* l7 R- $logo_qr_height = $logo_height / $scale;
. V5 I9 y, F0 j- m* K
# K; _+ t8 q6 e7 U4 Z2 S- $from_width = ($QR_width - $logo_qr_width) / 2;; r3 k% o/ v# }& u+ [9 S# _
- - E5 J* y; L/ H' {/ o" u3 [3 o% Y
- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height); . }/ |4 L7 ?8 C. H- G; ^
$ j8 e- B$ n) a& e s5 S; c- //输出图片
% L* R( f1 m+ Z) Q2 m9 I
4 T. f: F) e0 _5 [! |" \6 f- imagepng($QR, $Logo_re);
& ~. a+ O; B" `& }; i) t3 v
/ l7 u |: a6 V. ^+ e7 t* i! A- }$ m D' ^ v8 ~, q5 n4 M
- % G! [0 V; w) }% G* s( t
- & g1 ?9 {4 v) n" ^4 n( ]! h
复制代码 3、qrcode_vcard.php (生成电子签名)
; X7 f9 ~+ e. {: Z6 j5 I0 R; a1 K' R- g- g! d
vCard格式:https://zh.wikipedia.org/wiki/VCard' w4 h1 P% c1 k7 R
5 v) q: s: A4 ]) P5 S
3 Z6 e* n6 U" P# ^7 b v- * Created by PhpStorm.2 @$ [5 b& u# H# O- V6 r f; T
8 W3 N3 m% V8 z0 r: P* }- * User: user
3 f- |% T& F# i+ E4 ^+ a
( \9 F! T! w8 Z0 ? Y9 w; U- * Date: 2018/8/152 Z3 S! U+ ~+ r. Z; m/ W% f/ {
) S& g! M- k5 g: L6 {- * Time: 23:00: g8 {" s0 x# R. Q+ ~) k, ~% P; I
- . r- u0 B8 F6 c) x# B, j
- */require_once "./qrcode/phpqrcode.php";/**0 n1 L/ N4 r9 p+ q
0 H Q2 w% e+ s8 r, {: v; D- * 生成电子签名
, f3 m+ m. t( ?4 { - ! t+ ]- U9 o [* d8 F/ l
- * PS;使用微信扫描二维码
' U, C" W* u* A3 z4 L' E
# J6 S6 H- a7 l0 i) k- */$content = 'BEGIN:VCARD' . "\n";//起始标志
) {" Y: L- b% }( x6 z
2 b3 j6 }9 {1 ^" g t& ^0 z. j- $content .= 'VERSION:2.1' . "\n";//当前版本* {8 C2 `4 N7 _2 X/ Q! t' ? l8 B
- 5 R( l: H9 Q$ i7 z4 N+ I8 v6 z
- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名& O8 L" T4 l4 Y, n
- & n+ O5 T. e& ]! \( o
- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称7 C- N/ _& ]1 h" t# H' ?# F6 S
; h+ r$ N. K* k$ ] g7 g, u% |+ ^, X- $content .= 'TITLE:PHP研发程序员' . "\n";//职位
: i: g; p+ C' N& E5 c. E8 v# O - 1 i$ f F: Q- z2 C5 Y# T( @
- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话2 I% z+ V# }, z# G6 a1 c
- : F* G# r/ y5 ?- H% [+ ?4 [, d
- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址
8 s# O7 A# N. |7 }' W/ k+ ]0 D# Y* l - 1 Y9 ?( F) M- [- P$ Q% h9 W
- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)
9 j" ^% r1 Q4 U* U' _% O) \) M - + g/ L# j1 P8 E1 m7 g: \9 H
- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话6 q& T. J/ @6 I- y u1 r7 D: o
- 6 _) l$ T" p; W7 I" S: \
- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱
7 ?3 g/ L9 X- l7 o9 ~# V& y
S7 {0 a$ J# x* ~& A. F5 K- $content .= 'URL:www.baidu.com' . "\n";//个人主页
, L& u" ^6 r2 e4 O% w& y. y - 1 O& K; N! {, V: }& c
- $content .= 'END:VCARD' . "\n";//结束标志, p2 }) f* B; |+ r
0 O: y7 B* i, Q- QRcode::png($content);
8 G6 {* V0 }4 s; j1 ]! x8 m - % W* b% [" V5 N# b) _: F5 k7 W F1 L
- & Q8 n) k- T, m( k2 b1 Z1 i# z3 i1 n
复制代码
! ]. O( i+ t2 h& @# u" Z相关文章推荐:
; }3 h/ H0 ?" G# I1.PHP生成微信二维码实例4 G8 M8 w2 V8 ?& U% q
2.php网址转换生成二维码6 n: U Z2 O. Z/ r9 X
相关视频推荐:) R [5 G" t, I( @) T) H) L
1.独孤九贱(4)_PHP视频教程0 C' c+ O! v. y V4 Z, K% `
二、JQUERY生成QR CODE
. z5 W" e, c: Y' x9 ~/ P源码地址:https://github.com/jeromeetienne/jquery-qrcode
/ _; f6 `! k* K1 ~& X8 v+ g' d; Y% x
jquery_create.php
5 ~, a6 M! x" R! R0 ]4 O* |) M8 S* o4 m
- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码 / Q- A( n+ T( B# |8 T" j/ S
三、PHP识别二维码
# n" y# K% Y- @, d8 a1、方法一
! Z% s) o! s! e7 v8 C. ?) e% T环境需求,安装如下扩展4 B0 o! r. ^/ M
- ImageMagick
/ s( ?& U3 `5 r( j- zbar
0 u7 s% O+ o2 B5 H5 I- php-zbarcode
; M8 H. t) I9 `# v- c
- N7 ]( X7 F: r/ A! G2、方法二7 ]3 K* ~$ J0 r
PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以
, \2 ^. O! t$ J6 x5 g5 PqrReader类:https://github.com/baagee/php_QrReader- E% \; d, T' Q0 P& E
' r; m2 ]& O% ?0 D* b% o- ; m: I2 Y" r# e: Q5 N3 S5 ]
- $qrcode = new QrReader('./test_logo.png'); //图片路径
/ h) B% R4 C% B+ M1 P! }$ n - & O) `# U" l! I: b2 M- [, l4 E
- $text = $qrcode->text(); //返回识别后的文本8 a: X/ ?" F2 {' V. r( z9 ?
- 2 V- D4 ?' |: D$ d, m: J8 F
- echo $text;
3 W3 g; a% A ~9 `6 G. h
; ] f3 d% |+ ^" x- # X6 `8 Y, F7 K
复制代码
$ }* ?/ i0 x. c0 W链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7
( W/ p; {1 t7 h9 ]2 k2 y; Z; }2 Z1 q: y
* H- j- q5 S0 s6 {+ e' [) m
7 r; W1 o2 {7 W3 V! |
6 K2 L* A3 F8 m) J: f g
5 Q. B: w) [$ P) l5 S" \) T6 c3 O6 C4 {- Y" j% `; h' X2 v' z" f
4 v% H( D4 f6 p& k, a! Q; K
: `1 k! W- C, S9 x7 c: F
# q1 m1 R" t4 K2 Y4 X2 P: J |
|