管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。' M M! D' n6 m; q* p! Q: ]/ |4 Y
---------------------------------------------------------------------------------------------------
* `' n$ O7 R$ R. l二维码的分类
% Y# K" M' E/ ?/ C线性堆叠式二维码, f7 Z' P- G5 @
2 g& Y3 |* |3 ]0 B! o$ c+ g% H8 u
矩阵式二维码
% F2 ~7 H U5 p7 U* Z; b+ C0 L# H* |
) p: Y2 b3 \8 Q3 ~二维码的优缺点. E8 o$ n4 j" f
优点
) H, j9 i! ]+ @' J* f% C* _/ s4 T: l信息容量大
; @' x* ?( d: l) {
% S3 ^$ `' E$ o编码范围广, l, F0 Q* q2 O+ \4 ~
9 ?) H( z/ \$ C, r6 c! Y" r
容错能力强3 L0 M& v, @- ]; h0 w
: t9 N( K' V# V2 x, f! o
译码可靠性高
, B3 _+ L3 b" h: @- C# A. `0 u+ s) w0 @! b/ K3 i
可引入加密措施) J2 v, ?, S3 b+ x$ o4 e, N9 R
) W- T/ G: ]4 c* ^: j3 a- V8 ]' K
成本低,易制作
1 w4 k! j9 z& l, g7 B! n' e3 e4 W1 Q4 t' s
缺点
) A( v+ G9 x2 h& s二维码技术成为手机病毒、钓鱼网站传播的新渠道8 F6 n* `8 X3 O
I3 r, H( e+ @' h4 g/ I
信息泄密
) j: I; f; m( {0 o# u
6 H0 f' I* c% z! C& `7 a z目前流行的三大国际标准
& T5 ^6 \7 H3 L0 B4 z7 vPDF417:不支持中文
# M/ S7 F2 l0 K5 q' v1 }* I7 _' }+ Y8 s2 Y. {+ h
DM:专利未公开,需支付专利费用0 R" h; z0 H" L/ k, \% l" B
6 R: h# W5 }& e8 `9 rQR CODE:专利公开,支持中文' @! _3 t. l0 T
/ M, b u5 [4 Z( q Q( X
QR CODE 纠错能力
4 {9 |; u/ q; {. uL级:约可纠错7%的数据码字7 `9 r' |3 J* T2 y- ]
, O# c* c) Q% t! e8 `% A6 v
M级:约可纠错15%的数据码字* p _4 z# x5 f- y
- \3 g. ~/ I5 b9 [, Q T0 k
Q级:约可纠错25%的数据码字
. W; h' d$ m9 y: Z- g* ]5 F
7 P: D2 i) q, e4 J4 uH级:约可纠错30%的数据码字$ m3 p6 X! v" @
+ z! v6 G" f8 ]/ \! v9 C, w" u
前提条件
1 U* j- X; ]* {+ P" B( I3 wGD库
- H4 \3 F7 S9 a+ G. r$ }4 [+ p$ z, i, l
一、PHP生成QR CODE
8 ^9 r; _9 V% u4 J" z8 ~官网:http://phpqrcode.sourceforge.net/" z* z9 J" K, }# ^ p; F
6 x) s7 |+ X8 D I% T( P _1 ?3 P9 B下载源码:https://github.com/endroid/qr-code, L5 _8 l/ h3 i; x; ?5 A
" Q( i5 H+ Q) W
目录结构6 D1 D8 C* o" u- T- Y
4 W9 A$ B8 B5 i0 u
( |( B- s( Z: P
1、qrcode_create.php
# I5 g; k% e. {, ^* @; }ps:生成普通二维码9 l a; f0 \# ]0 C9 |4 r, E5 J& J
- " `5 J! O4 p- W( K
- include_once "./qrcode/phpqrcode.php";/**
% c) L" ^+ c- _) I/ l - 9 x3 T% A: {7 y3 J; W, X8 u$ o
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径4 X7 P+ V" ~% b7 g
- + h/ i7 O% A) C3 k
- * 在浏览器上直接生成一个二维码(内容为abc)
# o O P3 Y, A: W& ]
' G/ W( W! a' \" V/ {& P" J- */QRcode::png("abc");9 M- O* |( ?. H* _! B/ o+ G# a
' u/ b+ I6 Q( p9 i- q- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**3 K2 N! O8 L2 H' ^$ W! T
+ S5 s6 Z* ^" o- c- * 生成文件到本地7 t0 A0 [5 O: e9 t$ e% T+ L
3 k7 i- u6 A; J, n- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)
4 L1 x6 ?; q z5 u8 d - . J9 H! [; F9 K6 ?
- * PS:$saveandprint源码的p6参数做了修改: B& J/ q/ G# b! y" | F6 B
- 5 w6 N$ `; O/ ]2 ]) H
- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);1 J% o5 _* ?8 o4 |: X, r" @
\: g! |, d- W+ Q8 k, M4 g
3 k$ w5 ]/ `* Y, r$ P
复制代码
) S6 u2 j1 B7 U' U" Z2、qrcode_logo.php/ o& M; |; F' H
ps:生成带Logo的二维码
% k+ R2 t: J7 y( ]- /**1 J9 n3 K* h% O- J: g+ R3 D
- 9 y0 E1 J! v- u4 W# ]( F3 @' l' G5 O
- * Created by PhpStorm.: n6 {; e+ M* `
- 3 B8 W' y1 G( c" y# o
- * User: user) y4 c1 ?4 J4 [/ L$ k- g9 K
( M5 L' Z# e$ I4 d- * Date: 2018/8/16. r# k5 A( f1 A2 a; v8 q/ D$ f
* ]0 N8 Z4 q! W4 ]7 ?- * Time: 10:436 p! d/ t, I2 C$ ~* R( G
- * d' E' C! e( d! Y1 x* _; L
- */include "./qrcode/phpqrcode.php";$txt = "测试内容";
! b8 \/ _; W) d4 l7 g7 a
) p% ?8 @- X% X# U( m5 k. | V- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称
" U, d- A- A' J: O- \3 f
$ d1 `& p+ ^7 `- b. v3 l- R- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是
; w" j- Y# _' h- f2 K
, X+ x; b; E4 E8 n0 f5 b; w$ `- $margin = 2;//边距
0 I- k) t3 t; a7 h) M" S" l - : Y5 ]* g# U! _0 ~$ C2 \
- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片7 s. e/ H: ^4 {. O# ^
6 i" o! A2 I" n( v2 }- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){ , {/ Z0 A( N% a7 @! }
- \0 M" ?5 g# _% y4 W
- $QR = $picPathAndName; //已经生成的原始二维码图' p! ~/ j0 F0 p# b' H: A% _
. [4 W( u0 p) B3 T3 d2 r- $Logo = './pic/logo.png'; ; ^, |9 o. T9 r2 h' o2 M
- 2 B2 j- s q& @9 e' ?! b9 K
- $Logo_re = './pic/test_logo.png'; . m a, h! b- d/ ?4 g1 R
2 o4 F3 i6 G- D5 a- $QR = imagecreatefromstring(file_get_contents($QR));
7 K2 T( H; E; S8 D5 B# Q9 K - - y1 o" I- \6 [* {
- $Logo = imagecreatefromstring(file_get_contents($Logo));
2 o+ q* H$ k# U6 j6 } - , Q0 Q! D: j3 U' X
- $QR_width = imagesx($QR); //二维码图片宽度
& w) f9 D+ q: H a' Q% }
! X* ^( D2 I. D- $QR_height = imagesy($QR); //二维码图片高度* i: K; m2 |1 k, K/ G/ q9 v8 F( u
- # q2 ^9 c' X3 O3 Y8 ?/ S: x% C5 n% C
- $logo_width = imagesx($Logo); //logo图片宽度9 f2 \1 M/ C! `8 J9 f
% l' `' Z) Y# y7 X- $logo_height = imagesy($Logo); //logo图片高度6 g9 o0 N+ |: v7 _
- " d* b) C, r' f6 Z0 o% f* z
- $logo_qr_width = $QR_width / 5;
- {$ x3 D! }1 w2 p
+ H4 Y- I- s( I' U- $scale = $logo_width / $logo_qr_width;
* }0 Y8 m% \. I {# Q3 F! M4 z
F1 F$ U% }$ q$ }3 L- $logo_qr_height = $logo_height / $scale; ; ] M2 d- z, `# d$ h
6 @% b+ L5 _8 s- R% K! N- $from_width = ($QR_width - $logo_qr_width) / 2;
$ u3 F; I0 I0 I3 c# m. {# i# J# I
$ p" X( X" y3 V1 n# g$ M. r- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
' x% k6 L$ k$ T% y8 D
9 `2 g- ^; V) l" Z( _( T- //输出图片
& S( ^3 q s3 o; V! k! y
* V* n, U( ~) a" m- imagepng($QR, $Logo_re);
/ V' L" M7 _! K" c' u
6 J- @# \, R$ Z! h- }" P9 L% E" b$ C5 A( X
- 7 B: H8 w; ~8 C2 j1 |* \
- , u9 f) U/ d3 c+ j) o
复制代码 3、qrcode_vcard.php (生成电子签名)3 D% d5 j6 W) [
3 v" t0 c p6 c3 b0 evCard格式:https://zh.wikipedia.org/wiki/VCard
6 g% `% Q3 D* @- v: H! j5 d7 A; G( _) f! o+ A7 P* |
- 7 u0 V J* _6 i: r# D6 F7 C# t- m
- * Created by PhpStorm.
4 y1 w$ E& z( o! P w! I
8 w5 d, V" i* j* k- * User: user2 }( e$ p# J2 L4 q1 W
- 9 ?/ f" ?9 \% z- a& F3 i7 L
- * Date: 2018/8/15% h( y6 b1 {6 V [/ G; L! \' t7 L
6 X _+ d ?0 Q- * Time: 23:00* k; w0 D5 r7 p% H
. Y- A. j$ B: D* F" ~/ }& [1 r7 x- */require_once "./qrcode/phpqrcode.php";/**
+ A+ s% D8 E. b2 ]
4 R& t0 }: E& N% e, w4 r& t; O& Z- * 生成电子签名
3 N x( b" g# Y/ S& Q+ F- |. i
9 F* T4 e+ N& m( `4 c: l- * PS;使用微信扫描二维码
& I, t0 {- ~6 H' Q - , M, W; c: _% [! ~# | V
- */$content = 'BEGIN:VCARD' . "\n";//起始标志
- f6 I+ n" E6 O R0 K
& Y# f$ A1 H( H" T9 c9 V- $content .= 'VERSION:2.1' . "\n";//当前版本
' H* R1 [" X! b7 F/ n: Q - + g5 y9 K$ G8 \6 y: ^$ G* }
- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名
6 ^. ~- K$ G) e- ]1 E- {$ [ s
' b% S, |" F8 ^ p6 T* r% W- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称
2 @% K9 [7 U1 L6 ~$ @" t# [ - ' r7 {& ^4 t: S
- $content .= 'TITLE:PHP研发程序员' . "\n";//职位
, q' q2 f/ o8 S: Z: t4 H ^! B - ; R% n8 f. @. Z6 |1 u1 T
- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话
1 K& G5 f- `4 x9 D4 k - $ ~! z4 A d! c
- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址
$ Z& Y3 b! T" g# R3 _ - , i3 o1 v/ ]8 [# i
- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)- d* v2 a4 g$ k( ]
- 1 x4 r+ {7 l% ~2 C, P* g
- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话- F. `: [! j) t* q" p2 P0 }; |& y U
6 O+ J4 ~" [: e) n* E- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱
0 J) d. f4 x# E+ ^ - 3 c' X6 F( |. D, r3 ~
- $content .= 'URL:www.baidu.com' . "\n";//个人主页
) D& \; b! [% a0 B6 R
# U& T( t- Q0 B- $content .= 'END:VCARD' . "\n";//结束标志) a5 W+ A: q: L* v& L+ b
7 [- _: ~1 [. V/ l, J" n. ~- QRcode::png($content);
# T, `- L( D- f5 X2 h
6 ?2 C' I# t: v$ z, r- $ P( ]3 U2 D7 [3 X
复制代码
0 Q, P" S: \0 W# i9 p! C相关文章推荐:1 R9 r' U3 n4 w( u
1.PHP生成微信二维码实例
/ C( L# X4 s/ q) x2.php网址转换生成二维码1 ]( |7 ~7 C0 E& p
相关视频推荐:. d6 [' ^ o+ q2 U
1.独孤九贱(4)_PHP视频教程
& e- h. T0 J. S5 @; a/ w; ~二、JQUERY生成QR CODE6 Z7 r( o6 s3 V! ]6 m% V% |
源码地址:https://github.com/jeromeetienne/jquery-qrcode# b- p3 L/ c/ \2 n8 z* r. ~
3 k9 Z/ d% @; {4 _jquery_create.php
) P7 A( U8 b! z7 b; K6 B, m& E# q7 @. \: w9 n' B
- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码 7 }% x) E+ r) ^- z
三、PHP识别二维码7 w$ `. b. c5 @0 \) @) q
1、方法一
. j# p' s5 `9 |, Y) G) H7 r: }环境需求,安装如下扩展$ g1 O ] w. P. S& h) ^5 Q3 ^
- ImageMagick4 P H4 D* e! v- k4 M! ^
- zbar
+ u- ]: l0 Z. v' ~7 s, a- php-zbarcode
_0 E% g% v6 z4 J V4 ^5 R" l5 R8 N( L ~ H! B
2、方法二
% [% O) ~& q, }PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以* T! O* D) {; E6 |# p3 R! z* {7 q/ r
qrReader类:https://github.com/baagee/php_QrReader5 g1 { x5 E& g; ~& i
6 G; z; w: {# y! ~. q- w3 @- : ^3 J& `' d9 H4 B9 V$ P& f f1 o
- $qrcode = new QrReader('./test_logo.png'); //图片路径% f0 W# A" y% Q9 n- M
- - i4 f% Y# h. C. X. s
- $text = $qrcode->text(); //返回识别后的文本- v6 g2 X9 S8 S8 v t
% B& o1 ^4 U4 ~* l- echo $text;
0 g7 ~- f+ g. d
' Y# x2 L a8 r. v0 R
' c' k; O8 U" P" }" C6 u) F
复制代码 7 {$ K% u3 w% Y2 o
链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7! V3 P4 V9 T0 c
" o4 v; o% ?/ c2 _5 ]% {2 z
5 h# O# `( o# U7 I3 w6 C: n) _' q$ B9 a6 J6 a
4 P/ \ r- ^6 c- w, N3 a8 [3 T) @( \
8 P( c7 b& ~1 w( j* R4 ]- J) M, H# w F; |: c+ [
7 D, `1 K' a3 `6 J/ m6 V, G8 {
: h Z, L2 |$ ?5 A3 b
' | _3 l) X0 G |
|