本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。/ P2 h, H( i: S$ _
---------------------------------------------------------------------------------------------------
9 F: j$ Y$ f7 r: ~( _0 L% Y+ o# D二维码的分类
8 o( ]7 x) e( e; D- M线性堆叠式二维码
$ ^) N5 _2 ?# N$ `2 F+ J" ]
: j+ F8 _# H& F6 R8 K2 J+ u! {矩阵式二维码
5 u: |+ f/ B" a# A, S
1 P' ?& M2 G) B二维码的优缺点
- P# s. j. J+ W优点
, ?( J5 Y/ K0 B; z信息容量大
0 t8 Z/ F0 l; N& R1 J4 p$ ^/ I8 g0 S0 P7 n% A# H; A9 z0 q
编码范围广
; P0 U5 Q; \6 I! Q& f% Y/ i# L! E: Q1 m9 ~
容错能力强% u/ u G! `! X( ?) t7 N
$ I9 g' {% s. K2 Y6 w
译码可靠性高
4 d3 M4 ^# o" x" F: r( N1 D5 [
0 d1 l1 a2 r& c, h- m# d" s) R可引入加密措施9 z. H) }; `" M) @& G
6 a' o% B# j: U* F `! h4 ~, w, H
成本低,易制作
5 {) h4 |3 h/ `+ e5 Z/ g# J" {
5 D. h3 x: `' L% u ?+ i' [缺点
8 C9 J$ J# w! a9 G7 W二维码技术成为手机病毒、钓鱼网站传播的新渠道
7 g+ H& _6 ~% v/ t" d b3 i+ z( W5 l/ C/ X, g! `5 n! K
信息泄密
* O4 H( A1 l. C. [) [* S n7 w m z$ n4 F( v2 q3 a" \. e5 w
目前流行的三大国际标准
$ ]6 @% v! k% H- p ^PDF417:不支持中文. w& p2 _* Y5 e3 G# u
. T4 p9 T4 v6 |' p1 i( n+ q
DM:专利未公开,需支付专利费用2 Z) n# ~$ a$ b1 N) F
N9 h/ r8 m% _" T" `QR CODE:专利公开,支持中文
) G' N6 e6 }. u- w
" O9 Y5 t# o" `QR CODE 纠错能力
8 v0 }9 K; H( S" v' ]: @+ E) {. o: ~L级:约可纠错7%的数据码字
3 z! I/ V/ m0 ^- h+ [3 J9 G. k1 f) m% X+ N6 C
M级:约可纠错15%的数据码字
6 H' p+ @+ f& G
% E: ?; [- A, J* x. E7 H, J3 O6 OQ级:约可纠错25%的数据码字
/ S. o2 N' F$ |$ p d7 \) \3 m: Q1 o$ p( Z2 l0 c+ w7 d
H级:约可纠错30%的数据码字0 o) Z% e9 k5 b* X4 N# ]
0 I# i1 X' x& @0 R5 }6 l
前提条件
1 P4 u* @1 H2 RGD库2 B, |7 N9 u3 W: G0 L9 B0 a
# U' @! J- N* ?: e% i+ f- W) ^0 \一、PHP生成QR CODE
[8 k. y& S7 [3 S* K" z) F官网:http://phpqrcode.sourceforge.net/. K H. r, M" i. {
; @. ]) u% I7 p" \下载源码:https://github.com/endroid/qr-code
1 f3 _0 Y4 {9 o B% u& G' L4 i) E) l
目录结构
% k9 s3 ~& k. n: ^
. e; M2 _8 G0 T+ _
$ ?9 x8 V `0 S A& v; E+ I9 x1、qrcode_create.php
4 b, N8 R1 J) Gps:生成普通二维码
/ @* O' Z+ b, M: ?4 [) P8 G
1 M% @; i( I9 e5 g' g4 v' _& F- include_once "./qrcode/phpqrcode.php";/**
' {! p7 r& |5 p, d5 {4 x* I9 b7 G, v - 9 U5 r( g5 X$ Y+ Q2 E u* g5 D
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径
8 @* i/ u! c- E% I& \' F) O% I. H; m - y: D; U ^) N8 }# g/ F# g0 p J
- * 在浏览器上直接生成一个二维码(内容为abc)% r/ E5 N, f% P) R$ r7 y
- : h" v0 X- _; P8 h g' [/ x
- */QRcode::png("abc");7 g. ]6 H9 u& P0 @; r
8 s. c* W+ y" {. t- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**
% u$ C( G- h! u7 w N7 y - 9 ?* |9 f6 O" u# \4 I
- * 生成文件到本地, v6 @4 Q( m. A4 V# f; j
0 Y$ E. N' E$ K5 F; C2 B- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)
W6 H. Y& O$ M) R; e+ R* a
& w2 O+ f2 p( l T* d' a- * PS:$saveandprint源码的p6参数做了修改1 V% E5 [% ]8 s( x5 Z6 H: A
6 [' D. `8 s9 ^0 S, X8 _- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);7 I& x% q# [! G# x# f- g
$ N( T5 t' d) [% B$ X
- Z8 C* X. P- T. J8 y) t
复制代码 0 L$ q# b8 U) T( q
2、qrcode_logo.php
9 H) |; Y1 @6 p8 s6 o% h/ k+ Hps:生成带Logo的二维码- Q* x# f2 P% ]4 Z
- /**9 [% ~/ n/ @7 w2 J* n$ j
. x. V/ K6 M8 T: M0 U& T( T- * Created by PhpStorm.$ `' K0 P3 |. G
- ( s& G5 g3 X! ~8 C* [
- * User: user; s- Q4 H! f/ y! v" p$ V1 D
- 8 R* Y/ N& S) T# O% ]+ p' S5 F, _
- * Date: 2018/8/16
. e- _1 y8 r4 E: ^5 `+ ^2 h, {
1 y) {; k, N! n- * Time: 10:43) t) s, G/ {: z* b g
- # u' ]5 X; K {, i0 H
- */include "./qrcode/phpqrcode.php";$txt = "测试内容";8 c, Q" @5 _) x% S# f
- # t/ k1 Z6 ^' R9 R+ N
- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称( D! J9 V- x9 H5 ?0 Q
1 e6 @1 I& z; t& @- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是
+ c6 c7 r( W4 {# [ - ( k9 x8 n8 n8 T- }, A% ~
- $margin = 2;//边距
+ A% s' a) \- Y" u) N
4 X% _3 {8 I! |9 _* u. [- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片) E! W. c6 e% ]) e% Y* r* o0 ^2 t
" }5 M% N" i% [; [) g" S- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){ 3 j% ]& P" M1 r; i
- 9 C" e- W8 x' t+ ?
- $QR = $picPathAndName; //已经生成的原始二维码图
6 v' @% m! r0 v, t - 7 H# b) F9 P' L, _1 s. S0 h
- $Logo = './pic/logo.png';
4 m5 k: @% V$ _+ R# }# N
% l. j& P5 F0 D% T; z4 `- $Logo_re = './pic/test_logo.png';
% K4 J: t- D7 w0 L
F% y; A, v h( }) C3 X$ E; m X- $QR = imagecreatefromstring(file_get_contents($QR)); 1 ^" e7 Z8 k2 Q" `/ d" A! T/ _* r9 z
# g! O( h/ s! z2 W- $Logo = imagecreatefromstring(file_get_contents($Logo));
- |3 o+ R% I% D# x: ?. j
* S3 ^1 w1 G1 Y( Y; Q8 e$ _- $QR_width = imagesx($QR); //二维码图片宽度
* s$ m" d8 C' h- Q. Z* c) @
1 K3 @# Q$ D2 c# |. \) W- $QR_height = imagesy($QR); //二维码图片高度4 ~5 f4 ~4 K" s% A% }8 v; ^0 D
- 3 i X+ w ~7 t2 W8 K. C8 e7 r2 [
- $logo_width = imagesx($Logo); //logo图片宽度
9 _/ x3 ]: D% K1 K5 X* C- V
3 J; |7 p/ o9 j0 W3 U" N- $logo_height = imagesy($Logo); //logo图片高度
- I( `- b/ U" v( B8 C2 b0 s9 v, ? - & C4 g0 r4 o* x6 K" X* T
- $logo_qr_width = $QR_width / 5; # A( D5 P* g/ v- D
- & R" D( z: _5 m# d
- $scale = $logo_width / $logo_qr_width;
/ a5 L) Z( V$ {- e. {- j" K
+ i* m0 E% F) e8 z# A/ b- $logo_qr_height = $logo_height / $scale; 2 s' m* f0 n; _2 C- T
- t+ c- q6 [7 K- X- d
- $from_width = ($QR_width - $logo_qr_width) / 2;
' L9 ]# T. k7 h - ! L, J0 ^8 o2 a& j* t. k
- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
" ^" X0 N) L2 S' W - 3 A/ a& J. `- k( y( v, R7 @( M
- //输出图片
+ [) i7 F0 l- H% o2 a3 V4 x - # w9 R% a' I: B4 l2 `2 e
- imagepng($QR, $Logo_re);
& I) \4 H: }% O6 D
* o' [! A6 t$ H0 o9 ^) f6 x- }
) a* |6 y2 t2 ^3 B
# {+ h2 `$ y) G' u" {6 o
: S( b: r) c$ p! b8 \, e {
复制代码 3、qrcode_vcard.php (生成电子签名)7 `0 [3 R8 y% i( w
2 }) B) F- [2 A; t3 zvCard格式:https://zh.wikipedia.org/wiki/VCard
2 L% V+ X7 b; Z7 `3 T6 N4 {$ O9 q- O- @
- 9 j! W* V+ C% A
- * Created by PhpStorm.7 c2 t$ B4 Z' O+ D" o9 z% v* t
: u4 ?0 y) h# c3 ~/ @- * User: user) t: f9 Q7 ?, `& q5 l" j T+ l$ {
- " ^! } y9 W' V2 V V$ ]
- * Date: 2018/8/15
' E" t; T& Q W: |% Q/ }; V6 ` - , P. a5 O/ [+ V! L
- * Time: 23:00' g0 N2 L8 a. k
7 s" N9 j, L3 N. T0 d3 f- */require_once "./qrcode/phpqrcode.php";/**9 |) X# q6 i1 g5 N5 u+ W
- . e: n4 c6 K9 o
- * 生成电子签名$ R: Y' I) N+ N: U: O
" g6 z+ v# y5 f$ u# F- * PS;使用微信扫描二维码, C2 i. u8 W) x4 M6 ]5 Q4 l
$ V0 \, C" P, Z- */$content = 'BEGIN:VCARD' . "\n";//起始标志# p8 V$ E& m) n* K0 \+ L a. r
# k, Y2 w* L# s- W% y- $content .= 'VERSION:2.1' . "\n";//当前版本
5 \. }; W/ T9 h$ ` - " X0 ^1 L0 Y; C0 P2 ~
- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名
9 n# G: U" B7 _3 A/ S - & t/ R& s* D; K9 }
- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称
! Z, U( {" _+ O5 m% _" [ - % c+ y$ k5 b6 e' j0 T9 L, r& O
- $content .= 'TITLE:PHP研发程序员' . "\n";//职位" c/ w- D# Y/ ~% q+ B) r7 M- l
- % k, a, Z1 o# u O
- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话
3 k! \4 r0 c# }+ s
' O+ a% O1 L t- M R5 b2 A$ ~- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址 U" N. {' g& q) _3 v4 W
) w, I) }4 o6 t, G- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)4 p" d" [4 m4 b
- % F0 a6 I3 t/ Z2 m2 U* I% g# a
- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话
% y) ]+ ^8 m( @. g4 W. o( U" n' L8 m - 0 R6 {/ ~6 S) C4 Y# x: S/ v' x
- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱
% }# I' E8 Y7 T* b8 f - 8 K1 D7 i7 F7 w+ r. ?
- $content .= 'URL:www.baidu.com' . "\n";//个人主页
, T9 s/ w* l D% U9 N+ P
0 A3 Z A/ o$ A7 K- $content .= 'END:VCARD' . "\n";//结束标志
. A; P U$ g# d0 X7 d4 _
% H8 r, t0 T& `- QRcode::png($content);% Z' `; t$ ?$ R- n
( [* w; @- M: b# Q- 7 {2 ?: k1 S) A( ]( o
复制代码 / J3 x* f, n" e5 c) Z8 e
相关文章推荐:3 e* T) V* n# N9 R: g# l* H
1.PHP生成微信二维码实例
+ d; k4 x2 S* o# f x2 a$ t2.php网址转换生成二维码
" `8 |, A l9 `& e# A! }. z; F相关视频推荐:
$ ~/ P* N6 \. R: d4 ~/ w1.独孤九贱(4)_PHP视频教程5 n2 P) ^$ e; y" g, W
二、JQUERY生成QR CODE
* M7 _8 X( ?8 K2 X源码地址:https://github.com/jeromeetienne/jquery-qrcode8 A4 g8 N6 m( Z. q
* J5 I5 P; Z& O% d5 ^, Q. f1 T1 ljquery_create.php
: V& B( V {, o/ ^' K2 k. p0 v& G7 d$ x- s2 ?
- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码 F# r2 e, R# o) ^' z8 Q
三、PHP识别二维码: z1 @; X3 O, [! |& o( ~
1、方法一
% T1 d, P7 ]0 B' L4 n7 V; N7 ~! I环境需求,安装如下扩展' M8 w8 m3 P* {- M# C
- ImageMagick( q$ ]# h F$ u! |4 c' m% {" i/ t
- zbar
5 s4 y% K2 d" P* Z) p- php-zbarcode
. \# T( ^; R9 ~/ V" @
R2 d# T: {. y/ W3 o; o0 q2、方法二
& d) i' f' J. ~1 qPHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以8 N, t5 u( z* f$ E1 A" V+ g! Q" D6 a5 }
qrReader类:https://github.com/baagee/php_QrReader
' P' b2 T3 |( y, F
; Z# D+ G/ { C9 j) ~" m2 s
4 f: T* q% m% C% K. I$ v4 X4 ~- $qrcode = new QrReader('./test_logo.png'); //图片路径6 K. h6 T- {7 J- F. M( J
- % F* }0 p% o0 b& c" S* E! S
- $text = $qrcode->text(); //返回识别后的文本1 v1 N3 O+ R- K0 a' \ d; d( R& V
+ [# r" ^' n2 r& @) C ^- echo $text;
/ L8 f' B! F, F& \( D
/ R4 O( U1 k' \- 5 u" w" @: t9 H) x$ A E5 A/ o
复制代码
! Z- t% @3 T8 d. Y0 Y* C链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7
+ v0 |+ F( G; b3 \1 G0 Z: K2 y
0 ]# Z- O* _# i1 R; c' V, [
( H" \ P' ? V2 K" L s8 R' W$ c# f4 x4 }" K0 r
. j0 i, \2 V1 [7 c+ D0 v" ?0 y0 E P7 q* u8 w8 w& w8 f/ T# }0 Z
; a4 Y. Y+ Z3 g$ y, ?& I8 r$ N+ Z6 o N
' K/ X8 W* }# o; v
- |( i) I3 y4 U |