管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
6 ]: k) S0 Q) M! L4 e---------------------------------------------------------------------------------------------------$ W4 f D# r) E: F* R. Z
二维码的分类
* y/ E7 W! D0 F- ^' P2 _) ^0 X线性堆叠式二维码
& p- t( ]9 @' L* B }+ n& Z ^, X8 Y
矩阵式二维码+ x6 w: z: S+ E, h
) x0 R# H7 T) B9 T4 t二维码的优缺点
3 {# D. |& a7 B优点
0 u8 l, y% m h信息容量大. S% e& t) ~4 l% \, u
8 d7 T: T; E9 y1 A
编码范围广
' m0 M2 [* q W9 ~! b3 u) ^
& h4 l, X( M# t9 {容错能力强" X& S m {' Y7 n5 R: b! H
' j( W' D, P5 O% W, R" V+ ?; M$ P译码可靠性高
+ L9 Z- E0 B! p7 |
5 w, M- t7 o* \9 W/ K( Y5 ]可引入加密措施
& N p$ ?& c; `+ y# f7 i( ]6 o h
$ z% R2 B" q4 h成本低,易制作, h% Q7 n% b3 K3 y
+ t% x: X, \3 p3 k缺点
9 m% o! z2 ^* K; r4 M* P4 H二维码技术成为手机病毒、钓鱼网站传播的新渠道+ t+ e! k. q* m) {
+ k L+ W" F2 E# b8 j6 k, o7 a2 j0 X信息泄密4 y7 g H4 a% y2 R
( @/ E3 |% V. t目前流行的三大国际标准
# g t% e' B9 F9 f* JPDF417:不支持中文
m" W# K: G8 @9 j" p
" O: P0 s- |/ kDM:专利未公开,需支付专利费用0 ~8 C$ f2 B/ j; B
# }8 X( Y$ C3 V" f
QR CODE:专利公开,支持中文
3 e( H6 S2 M* r( T2 ^
6 }& Y7 r2 v& R# W4 M6 T$ bQR CODE 纠错能力
% U$ }8 _0 z& |- n+ o! C, rL级:约可纠错7%的数据码字+ n7 K; r* S9 T8 M c; q8 p
* B( a6 j1 D. Z; x2 z2 KM级:约可纠错15%的数据码字
, p7 X4 O+ ]8 _$ M0 t7 D) m+ A9 Y/ m& U- M8 p- N$ `1 p& V5 K
Q级:约可纠错25%的数据码字/ n' N2 E: S. ^
d2 R& z, H; R" h
H级:约可纠错30%的数据码字
+ O& n" `: M$ Z! u
1 g: U4 B7 p% B" C9 [- Q前提条件1 ]( w- _4 G+ P0 u
GD库
* l5 @0 V" O: Q: F
/ [% {& {% B5 ~4 d% z* [4 u: j1 W4 U) P一、PHP生成QR CODE& o8 |: K+ C/ `) S7 p
官网:http://phpqrcode.sourceforge.net/
# E& J5 \7 `" \0 `' ^. Y# T& ?$ _: `% k$ P) W% Y
下载源码:https://github.com/endroid/qr-code
. ^. @$ B( ?) ^' k* J/ X4 A. b; R( [; S. D0 _2 h/ R; y1 t! n- n( l
目录结构
0 F/ W% o+ [! e6 {8 o8 K* h
# _8 B1 ]# D$ S s+ X, i
8 p+ }0 s% J* i$ w1 F; c1 p: @' r A1、qrcode_create.php. a" b! L/ E, s$ x4 A; D
ps:生成普通二维码1 r" H6 W! p* M3 s" F
4 |( z; n7 {. G& {/ N0 H- include_once "./qrcode/phpqrcode.php";/**4 X3 Y3 ?0 U8 G0 R8 x& E
& Z% Y# l+ z5 J- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径4 k+ p" Z+ r7 ~) _. c6 {* k
- : f V. Q! R( C4 x
- * 在浏览器上直接生成一个二维码(内容为abc)- r$ q7 l0 a/ _7 ~
- ) j) p0 T% o$ w% {2 q- D- ]
- */QRcode::png("abc");2 i) g& ~7 U+ \5 h1 J, ~ ?3 G% H
1 u9 L1 n, [- h8 P" m$ L- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**
: e* o2 e8 y3 Q0 r- T
, g' t! N4 ]) \ g; C- * 生成文件到本地. z# Z; ~) d& ?5 a: e+ @7 ?) g
- / z) M/ f4 B" d
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)& j+ \3 o2 J: n: ]
- ' u1 u7 U9 V5 z: g/ R* U) D- m
- * PS:$saveandprint源码的p6参数做了修改" F% R+ a4 r/ M4 P" W
- q# o) `) x3 r
- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);
; _- M1 e$ c3 o
a# c; f/ |; r9 T# |
i2 g) G3 l* D1 v, v2 h& Q
复制代码
! b- o, M& O. c* y" i$ i8 v9 m2、qrcode_logo.php7 k; B( F+ ]) Z. X
ps:生成带Logo的二维码
' I8 D i: O+ v6 h4 \- /**
" ^; e! u5 A1 p& d% f5 L0 c
$ R# k K) E- V& p( O- * Created by PhpStorm.+ r7 ]+ f0 {! P# U! j+ i3 `( B4 F
* b7 |* G5 U% |" n- T6 c- * User: user
* E1 L1 }7 ~, c' n
1 j o% P/ `+ w( U: ~ \* v- * Date: 2018/8/166 [/ \1 Z! R) O0 c% _
- $ C4 w% K R1 q
- * Time: 10:43# Y6 i* }6 L F2 [5 H
- + k$ W8 x; s1 y3 {/ u/ |1 Y
- */include "./qrcode/phpqrcode.php";$txt = "测试内容";8 P3 C( t# k3 t5 o/ M
- 2 F: K( [/ z+ j; H3 C6 R
- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称3 T+ g) H0 g8 [+ }# A
- 9 T& Y: m' z" i0 L7 k# A
- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是2 s3 [( v2 T0 `# P
; J6 t7 Q6 j( @- $margin = 2;//边距9 e3 @# ^! ]/ |* z
- ! v- Z8 Y+ ^: Z) K" Y8 P
- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片
$ m' Y# X6 _. O8 R6 U6 T
$ w% a/ U) D8 q- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){ 1 {1 X7 a1 X( V7 P4 P
6 s7 `/ f: h' H W- $QR = $picPathAndName; //已经生成的原始二维码图7 J( U: P# |9 z' z
- ! ` I; e$ P8 H0 K- m+ x, r( A
- $Logo = './pic/logo.png';
6 G9 R* L5 k0 \7 |
* _9 {4 r& \$ t' W8 s1 K4 V) l- $Logo_re = './pic/test_logo.png';
3 m% h+ u5 S5 }& J3 D- |) F, w9 f
. ^4 E* a. X# W* Y: X- $QR = imagecreatefromstring(file_get_contents($QR));
) C3 ^. g+ H% `% c5 W' t
* L7 ^' M3 b9 ]$ A1 R- $Logo = imagecreatefromstring(file_get_contents($Logo));
8 y9 d" j# }( P2 c) f3 R5 X - 7 \) N/ x7 n& }8 R
- $QR_width = imagesx($QR); //二维码图片宽度) e* y% h$ V# r5 e, m! y+ t# }
- * ~4 g( M5 ?) a `' o
- $QR_height = imagesy($QR); //二维码图片高度6 ^; a4 `* r% h2 ^2 K+ }2 B
- $ Q6 t/ m- U( F1 y- C }$ I
- $logo_width = imagesx($Logo); //logo图片宽度6 f! `* J: j. }8 x; t0 B
Z. c+ E$ V5 u- d0 V- $logo_height = imagesy($Logo); //logo图片高度* v8 X/ J6 k* v. w: ?9 [6 m# e/ N! m
5 Y) H1 L: l& A4 u. T- $logo_qr_width = $QR_width / 5;
7 b% ?+ K; J. ~" T- H; H
i& e4 g$ b4 _2 X1 z; D$ i B- w- $scale = $logo_width / $logo_qr_width;
: z, Q v; A ^6 q! u) @# T' w - ! }" \9 ~; {! B4 C/ d0 _
- $logo_qr_height = $logo_height / $scale; 1 r6 E+ i4 a6 A! D) x
t i7 {5 A: X- |1 b" g+ F9 x- $from_width = ($QR_width - $logo_qr_width) / 2;0 `, u: a" x Z/ {/ _5 T$ Y
! Q! q' z9 ^, G! |- _- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
0 ?, a) [. u3 l# _
& \6 {# {1 G: m& T9 j# s/ P4 ^7 v- //输出图片
; f, `" d6 K C w) v4 x$ F( _ - 1 L$ |% @" e9 y: ~. j
- imagepng($QR, $Logo_re);! e& F% f$ J' ^. i- x+ ?* H/ X r9 P% z
- . y& {8 ^% g' u" Z& i- f
- }
8 C9 k! O3 O: p% D$ ~0 m: U$ e& x - |3 d0 C$ H+ B# W( j2 h% F
& X! @) _9 D+ Y' f( l
复制代码 3、qrcode_vcard.php (生成电子签名)2 s1 Q9 T7 I. C! f8 E/ e0 l
: ?7 S. Y5 H* V* N0 }/ hvCard格式:https://zh.wikipedia.org/wiki/VCard G6 b% Z8 b. U- R: U. M- K
6 m( h$ a8 F/ |, t
7 f" e# R" W2 g8 a9 W. M- * Created by PhpStorm.) k" x! X* G. Y
- ) U. B, M$ I1 F+ B0 l! \6 A1 Q: k
- * User: user
# T$ F1 Q* h, W0 G7 v$ j
6 R& ~ p8 t& R+ [- * Date: 2018/8/15
( h) R' Z/ h$ l: q: I, U - 1 b2 Z9 `6 h9 ~$ q$ {
- * Time: 23:00
: Z m- v' E/ ~0 {& q2 P - 3 _2 p+ J# p4 t( b0 I
- */require_once "./qrcode/phpqrcode.php";/**
" ]- b2 o F9 V
: x3 C6 e. ^/ x- * 生成电子签名8 M5 Z! Q# R3 A% u
- # y( E- p* p: Q: ^ T f$ n
- * PS;使用微信扫描二维码
# P( G9 C z9 \' [2 _
# f- p* P; P/ Z* Z+ P7 o* A) R* t- */$content = 'BEGIN:VCARD' . "\n";//起始标志4 x( N! | l9 E# ?8 C. n, J7 \
- 1 n V7 U: L, s. h% g$ ?
- $content .= 'VERSION:2.1' . "\n";//当前版本
2 M9 w& o y$ E0 }& F! g/ R- O. Y( W
! l }% l9 {! L8 J. k- t0 ?- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名" E* e( A8 x! L, H5 |8 F( [
- 8 \* e; t$ {1 }# c4 u- {8 }
- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称
! Q$ R2 ?/ h1 D/ U& |2 _+ q1 {7 n - , I4 I( x% ~; D% ]
- $content .= 'TITLE:PHP研发程序员' . "\n";//职位( v2 u8 h( B0 ]& {
: t5 B& c" D5 P; G) c# k8 J, h. X( h- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话 d1 E6 I( t9 g' G
" c+ o9 d( V& c! R- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址) ]3 E) f4 A/ S" W% \
' b/ r) t3 ]% w' t/ n+ E- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)
7 K- |% n# L' ^4 N- C% z
5 [3 C2 k& @/ q' o$ ?9 g- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话
/ j6 I# \- W0 ]) y) a/ S$ W
: m5 h% W" T) r3 f- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱
8 n. c H. e( w8 D! G" I( O5 ~! ^
3 D1 n& w; v+ S! e9 z- K- $content .= 'URL:www.baidu.com' . "\n";//个人主页# P* v- J: M: m8 @! r
- 3 p7 W2 b3 {. n0 t y
- $content .= 'END:VCARD' . "\n";//结束标志
: g7 |7 F* m* F* o5 H3 v: j - ; n U. D4 ?$ q% D7 t
- QRcode::png($content);
3 s, D v. H) b - - i @8 b% `- q" k
- % g% t: F" o/ Q
复制代码
: f2 r9 \8 r+ L# @% q相关文章推荐:
" p4 X1 H( X$ w1.PHP生成微信二维码实例
: c4 X! J: G: L1 _2.php网址转换生成二维码
) U; k9 m2 A F, d' [8 G* }& u相关视频推荐:
7 \% W& {& W4 N K9 q# r, N6 z2 v( B1.独孤九贱(4)_PHP视频教程
; h* F- A7 M& m6 E& |. w: b& {二、JQUERY生成QR CODE
' B) X5 `+ J. W! ]$ L7 j源码地址:https://github.com/jeromeetienne/jquery-qrcode
( l, s' X5 C: {- ?: C
0 k5 J5 N- z- S: Pjquery_create.php6 g0 T; r8 Y) j; O: f# f+ m* T
0 J1 g0 z& n$ p+ D; B) I! A) }6 t
- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码 % G. O9 L8 B. k9 ^0 E, D
三、PHP识别二维码
% `/ _" F, |. ^4 F" i# X1、方法一
, D! u8 a- ` V" p环境需求,安装如下扩展8 I( R3 T+ M. d
- ImageMagick
5 R7 o+ F+ |4 f' K. k0 ]' J- zbar
) _! w$ m* j; u/ J5 W/ u- php-zbarcode
+ y$ j2 m) e% T2 @5 j6 i5 w
% I! U b: s, I) k( r2、方法二1 l! G% M# i) d( C/ b/ d4 k, R
PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以4 [" Z) J- U+ w/ `
qrReader类:https://github.com/baagee/php_QrReader3 L" A2 m. G9 A
5 b! c- B6 D6 z& ^& j3 R- - ^' ~: q1 F7 Z5 _. Q2 u
- $qrcode = new QrReader('./test_logo.png'); //图片路径3 v9 [$ q7 W* [ W( T
- . Z2 L' V! N& r: O1 V# L& S' U
- $text = $qrcode->text(); //返回识别后的文本
2 _, P3 g, V; `. ~1 f* c - % n; ~. R. b* \7 l. M. N/ a
- echo $text;
, x z$ m7 [0 V" M4 e5 s
9 _$ p# @3 ?2 i9 q
9 Y" b. }1 y) u5 B1 n
复制代码 ! K" q+ u( C) V1 S$ I4 p
链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7
8 q" I( F4 b3 ~5 l/ `* Y. B* g) K" Y; Q+ n9 k3 c0 y
. p; o; M3 W; O0 \8 N' ~3 o o s% ^: \/ A7 c
2 h ]# n& {9 K) e$ B# ]( n- \- b+ b9 q) x ^2 L J3 g- k& R' c$ J4 k
4 N d# t [( y: B! `+ Y X5 D& E" ~7 L$ j+ P
0 u* V7 X7 U% r- }2 s
+ J' U1 F% \1 @% l& P0 ~ |
|