管理员
![Rank: 64](template/yeei_dream1/css/yeei//star_level3.gif) ![Rank: 64](template/yeei_dream1/css/yeei//star_level3.gif) ![Rank: 64](template/yeei_dream1/css/yeei//star_level3.gif) ![Rank: 64](template/yeei_dream1/css/yeei//star_level3.gif)
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。( c' D! Z) j0 N- b
---------------------------------------------------------------------------------------------------0 E% m0 x2 o% Y/ T; d
二维码的分类
6 x7 s6 r, L# l k; n0 I线性堆叠式二维码3 f+ P% m0 g6 Q% H3 W+ A7 t
, U7 X$ A% G; ~7 O) M5 p' |2 L' t
矩阵式二维码
9 w) k, k* |5 c; @. @8 E, m1 q# F+ L' `, y/ m1 n$ x1 e! k
二维码的优缺点2 v8 N( }; [3 D* u3 C5 u
优点1 F+ s% M* N& R& a5 |
信息容量大
8 Y1 ] i$ F/ y* I, H1 h$ t: a( m# N$ |1 z
编码范围广; S' y0 o7 Z( f' ~+ L& l' U
5 b& v/ r& {- ?( d0 H! a8 f容错能力强 U! N- L6 G8 z' y
) r$ L4 J) H9 S$ ]% T0 J/ R6 ]* z
译码可靠性高
8 \. K, L+ Q' n7 M: @
4 M5 E$ s: C+ g可引入加密措施
1 k. U3 ]4 D' I. g3 v1 i
9 w+ p2 b" j* b# X4 Y2 [成本低,易制作/ w! G! {. M4 a4 e3 u/ u6 P2 f
, U0 h: a& o1 A$ \6 b( ]缺点
& N( |# |0 j q) P8 B6 I0 C8 D+ r: \二维码技术成为手机病毒、钓鱼网站传播的新渠道
3 a0 t1 l* U* S8 p' V. L5 H
; q$ c' ]4 Y. [, F( N7 K信息泄密: j% p4 t8 B& { W: x( i" x
" s: R! h% J9 V9 b. E( x% N! H目前流行的三大国际标准
6 M6 y% n! y4 y, A& {PDF417:不支持中文
7 e8 j- z/ M# z9 ^ o' x: I1 D, \* x: q2 K
DM:专利未公开,需支付专利费用& {/ H5 Z( ]4 Z3 E6 j* n4 [- S
9 c1 @) a9 W+ ~QR CODE:专利公开,支持中文
) a- z( w4 J G1 z. s" z5 o; n/ ?1 i9 b8 @; j" f6 ^, [
QR CODE 纠错能力% i7 @- W4 Q: L$ B# ~2 |% n, D1 p3 l$ P; V4 E
L级:约可纠错7%的数据码字
/ |/ [( F7 _* r1 n' S
3 y- O( y P& q) P' ?8 I \6 E" i9 |M级:约可纠错15%的数据码字
" `- d3 E3 J; F5 `/ k8 T
! \9 u6 ~% t i2 R, e" `: lQ级:约可纠错25%的数据码字% c4 b& H/ ~2 G& \; p
+ c, E# R: \- e* k5 ?4 L. M
H级:约可纠错30%的数据码字
L4 f9 f: t! V, m
# U$ N& q) o; [1 a前提条件
% i/ P, t3 j6 t8 eGD库# `/ U3 ~& m `# y$ X& }
' h T$ y+ y$ |* z m
一、PHP生成QR CODE
# |6 Z/ e) J/ ]2 C1 {6 N) g* F& q' I官网:http://phpqrcode.sourceforge.net/
" Y8 r/ N& |9 P3 r6 ]6 G, Q! G7 _0 x5 b9 n, Z
下载源码:https://github.com/endroid/qr-code
0 _" @1 L0 h9 b, j
9 S+ i6 z p, K7 {, `! H6 x H目录结构
5 o: ~$ j0 }1 h: h8 s
5 P1 o, e; U2 h: |! c
) M- J! V- `& g. l2 K4 {) M5 C8 X
1、qrcode_create.php
1 z# i1 J5 Y: D( v* b) Pps:生成普通二维码5 S6 ?7 R# {" j9 l
- 9 I! B: d7 _5 G U% g
- include_once "./qrcode/phpqrcode.php";/**
' q; S- Q7 n- m$ w& n5 d - 7 \7 R/ r3 {+ j* P
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径3 I$ N( }4 B1 Y7 r: B
+ i% ^4 G" u9 p! X# i9 @- * 在浏览器上直接生成一个二维码(内容为abc), P- e. l: m7 X0 _: `! s
* X1 G3 x6 b- c% q- */QRcode::png("abc");; W& b# U/ u+ G9 J. h
- ) T8 ~9 Q' @* o7 M8 J8 d n! Z
- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**
: Z0 M) ]* [" c X# ?/ N- m - 7 ]1 u1 ?7 t* b& i" i2 W% Z1 b
- * 生成文件到本地1 ?1 m$ Z' D4 }- y
3 w* t# G4 V U! C- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印): W0 C( _; G @9 n7 ] }
6 t" f1 m$ _ s: M: k- * PS:$saveandprint源码的p6参数做了修改
+ G& \! ~: `$ U* U5 T1 m5 ]
L i4 C* P% L) f& C* M( M- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);1 P- H6 J5 r4 L5 T$ H6 h: f8 D. L% q
p: O3 m/ v4 m, v$ _7 s- . h3 a5 `. ]* ]% C
复制代码 / ?' T+ S7 b" ^. r) l
2、qrcode_logo.php) g. n1 z9 U! D1 M
ps:生成带Logo的二维码
+ r9 R/ S9 P7 `; R- /**
2 ^' O/ U- E4 _( H# J, Q
! d6 L1 v' h4 V5 E- * Created by PhpStorm.
1 R6 s0 O! @9 t& E. ? - 6 l1 _: d* P9 U" H, v$ Z; f- V
- * User: user B( i7 f6 ?+ L8 G- \; {
, h! Z8 U8 \+ b3 K- * Date: 2018/8/16
( K q% {" S2 J$ w4 }8 n5 }; Z) T: @; v
+ C0 U& }- Y V" j" z/ j8 r- * Time: 10:43$ c4 X; F$ W3 `4 i
2 M, T+ m. M1 w7 ^- */include "./qrcode/phpqrcode.php";$txt = "测试内容";
( E% F2 Z4 X+ k, n8 C) r _ - 4 H$ H8 L' e+ M; |, I* f
- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称
& D: g0 l5 F: J7 V6 a9 T+ d) T" q" d4 O - " a, r# U+ k* R8 x1 F: f$ U$ @8 @
- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是1 w7 x7 \8 ~+ [; M9 S# D
8 o; E! x) L8 i' F1 _+ I# L- $margin = 2;//边距
; e# Q" U/ f+ e' L* @7 }
+ S8 H4 V. s6 H8 `& I. a V2 ]- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片0 `! m i$ C$ y5 k8 T0 }
4 i4 k2 }! q- l4 m" n- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){
3 l7 X0 M- d1 b( y
% s* }+ g1 `+ G- $QR = $picPathAndName; //已经生成的原始二维码图
4 |! H, Q) n5 e( X
" I0 P- F! t, ?3 Q$ Z' t- $Logo = './pic/logo.png';
9 F- {. X- k1 N4 f2 ~7 ?
6 Q* \# _- ^1 J- `- T( T# _+ w- $Logo_re = './pic/test_logo.png';
) ?# r8 ~- R4 A$ G$ h' W) p2 F& E/ n5 k
' W2 V( f( A% L' O3 J% X( F- $QR = imagecreatefromstring(file_get_contents($QR));
1 N, U3 m3 |5 O$ {$ k) z( v' { - & f" J* ~6 K$ K8 H! ^
- $Logo = imagecreatefromstring(file_get_contents($Logo)); 1 N* r! a- k- v; I4 f- y$ e+ ]
8 g8 _; n$ D# o6 y. ~- $QR_width = imagesx($QR); //二维码图片宽度
2 h) D* C# b7 L1 W8 z! }2 [ - $ l- w+ a, _' R1 p, \8 U( @
- $QR_height = imagesy($QR); //二维码图片高度
9 c! m5 B& v! t0 c- i! ^
% y5 W ^3 t; B* a, I- $logo_width = imagesx($Logo); //logo图片宽度
( |8 M1 c2 F* F, P# a - & U$ F/ _* X8 M& Y2 ?
- $logo_height = imagesy($Logo); //logo图片高度
H6 M6 ?3 @ \0 W* b/ x Y
3 S5 ]4 d: c2 R: X8 C+ t- $logo_qr_width = $QR_width / 5;
. p: f( U/ c6 s" e) x* O - 5 ~: w+ G$ [; {) d% ^! e2 Z2 ?2 D
- $scale = $logo_width / $logo_qr_width;
' H# y7 a' T& o+ g) T x - & V+ o8 |# J& o/ d, ]
- $logo_qr_height = $logo_height / $scale; . X" }" \6 H9 U6 i7 i- o' x' w" \' o
" S9 _/ j0 W4 R$ H5 ~) @- $from_width = ($QR_width - $logo_qr_width) / 2;. _3 @2 b; U# C$ o7 M& U2 |% n
- 1 i2 s( m- K t. B. ^. ?. _+ \
- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
0 r1 u7 T1 a+ @- ]# J: o5 ]% w* f - ) I) F z0 m( S
- //输出图片
6 v! ~6 F0 k2 C6 [ G' Q
# `) C- p& L& C+ d- imagepng($QR, $Logo_re);% q7 U6 i% x7 L( o' R6 K' S
- : h5 I3 e! j9 H6 {1 I# D$ m
- }) r$ X. ^ C/ O/ T. t+ ^
; k& k% S# p' ]( S- ) m; l$ z' n: {% w; a
复制代码 3、qrcode_vcard.php (生成电子签名)% _1 L) N' c( {% s& P
& `9 W0 `! n+ U/ O2 D& G( I4 r/ w3 `
vCard格式:https://zh.wikipedia.org/wiki/VCard. W( C6 r: |: z: W: I- \
5 D8 `, i7 b; Q' J
% Q C5 a: n5 ]$ a- * Created by PhpStorm.
, X+ j; B; w6 b+ z# s/ N1 M# f - ! G2 t$ Q* x C: D! E- J
- * User: user+ T4 i8 U$ b5 W& T
' ^2 U- l! x- o- Q. _5 M0 f0 L- * Date: 2018/8/151 C/ x! C6 M6 q
$ L; G$ j! f. `; k6 k, X- * Time: 23:00
% e0 G$ _) ~3 b F/ }' P) s
! @5 ~9 \8 i0 x/ d0 U1 N- */require_once "./qrcode/phpqrcode.php";/**
$ A+ m( Y* U0 P: V+ y
8 ?6 F' f* @, r* H1 R8 W- * 生成电子签名
V. l* o4 u- S
( f5 D; k* E0 o# S# W- * PS;使用微信扫描二维码
& D* i# y" [& H A
; W) @2 r+ b8 u' J( N) J+ g6 y- */$content = 'BEGIN:VCARD' . "\n";//起始标志5 F- U" F5 A# h0 b3 f1 ]8 {
# o S! A- ^+ k o2 c- $content .= 'VERSION:2.1' . "\n";//当前版本) ^! c3 c* Y3 H1 p& H2 ~+ ^
- + V" v, w/ N3 m6 P' L% M7 W
- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名- O7 C$ x+ L( [# q7 c
- ( m- |4 c4 h" g, a7 ^) T
- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称1 R4 V7 @: j9 J6 X5 S, h
2 Q/ a0 V. Z5 _) ?9 G9 h- $content .= 'TITLE:PHP研发程序员' . "\n";//职位) v+ c4 f/ m9 p; U
- m* A6 p( z, T; v
- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话5 `' u5 o* N9 R( w
- 5 d' j+ H6 _1 w3 d- g
- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址
6 d* ]1 \' A. a- W7 ` - ) h+ Q+ i$ w0 c
- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)! a; J+ t+ |' L! n
- / U4 d) C1 D8 A
- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话
y$ ^1 M! h# {' @5 z& V2 }" b* Z - $ u3 j9 D9 b N! ^8 y
- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱* w: T, B. y9 p' B
- 2 q$ E; n1 f4 {9 e; A s9 Y
- $content .= 'URL:www.baidu.com' . "\n";//个人主页- M( K0 Z6 K, e9 c- N0 d
- ) u j( N- Q& n) x
- $content .= 'END:VCARD' . "\n";//结束标志( r# c) x d- J4 x3 M; w$ e
- 8 {7 v' b2 E. K# k4 }
- QRcode::png($content);
. U z+ Y8 M9 v; `# Y3 e1 \ - 8 r$ ]$ D8 O, e) [+ X% o
" y6 e% S9 G- X% V
复制代码
. u' N9 p& X! j, H" u. u9 ~: s相关文章推荐:1 e$ X: Z ?8 b" g
1.PHP生成微信二维码实例: }. C u0 E$ ]+ n
2.php网址转换生成二维码
% y) Y, [4 C R相关视频推荐:
- g0 y0 c. [/ v9 H1.独孤九贱(4)_PHP视频教程8 J& s" e: d4 \
二、JQUERY生成QR CODE
6 K& K, ]! o6 v& P. Z源码地址:https://github.com/jeromeetienne/jquery-qrcode
2 _3 Y4 p' Q+ ~1 b
8 k; n6 J% w3 Ijquery_create.php, G7 [! v' `5 |1 z- g
' Q# f( c- s* Z3 I
- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码
8 u( S) s* }5 a. S三、PHP识别二维码$ ^! L' F" b3 j
1、方法一
& }) e7 l/ |8 D/ r. D V0 N8 l环境需求,安装如下扩展2 m% [$ ?( U, V- U3 q7 q
- ImageMagick( s! s4 \+ f* S5 {$ B; C- e
- zbar) x3 l, x+ k o% @- ]7 J8 s
- php-zbarcode
" n3 Z I3 \+ {9 ^8 Q4 H( ?- `) V! e( s) `) \6 R
2、方法二
, b( Y8 ~6 G6 W( ~. YPHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以1 U: D' C3 B0 y$ d+ J8 C8 }- k9 V) U! F
qrReader类:https://github.com/baagee/php_QrReader& h: a2 v# {) H: \. j
. c5 o4 p: @! {* j- 0 Z5 J, t `. ~8 w: C5 _- D
- $qrcode = new QrReader('./test_logo.png'); //图片路径
, C+ D( t& w% C. _3 g - ) ^& m+ T8 o9 Y& t8 m! \* `7 r
- $text = $qrcode->text(); //返回识别后的文本+ N/ P7 c' C* z r
3 }+ k2 a2 j$ [+ H$ W; W- echo $text;
& \" W2 A' T* j4 Q* W" `9 ^
4 W% S2 Q" n' J( G- U5 v$ L/ X- ^' ?! h, r+ S3 l
复制代码 : K8 `2 n; @; D" H! n5 U
链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7
( U" i# y7 V U: a/ v
0 G/ D. j/ }. B; X" M7 R
/ ^3 L1 a d. j H: w) ~$ G1 x3 [4 d2 e, v. P Y+ C
: o1 F7 |+ Z/ |# n: _2 g, L9 }1 T1 a( ? g- k5 y3 M
2 b# Q& V4 y, B4 W
9 j! R# A; ^8 s8 s0 U8 ^6 s
" u) O+ P Y+ a' Y Z4 W# a: r) v
, q9 R' {8 N$ r |
|