本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。% C0 N0 ^; H+ L% H8 }# i& o
---------------------------------------------------------------------------------------------------4 y- l& `. c& n$ Z0 r
二维码的分类# x( a0 A6 k2 r0 v! H! V1 l
线性堆叠式二维码
. t% `7 `4 Q1 b( O5 l0 @% }. i; Z- _; [* ~ I2 y
矩阵式二维码
; h: P& `5 t V- C, D X4 E7 W. C p# d* ?7 N& {( X v
二维码的优缺点# ^/ o0 w/ z9 S: I7 D4 T
优点
. @* ]9 _* X1 V1 v6 b% J, y: S信息容量大; K" L+ t/ I1 A" P% u4 C) g
8 }$ i5 M: D* Z# E3 @- z/ B( d编码范围广
/ J% T0 a( ?# ^, Y. Z2 u( r- T% I9 C/ l6 R5 ?# x8 t
容错能力强
/ l8 Y& R& y5 V* B$ D E; y3 Y% E* |; s9 E; e. c5 V! J$ R: c& D
译码可靠性高
/ ^- o1 U$ j5 u( i; B
, p( Z, ^3 E( h7 } w5 p5 W可引入加密措施
6 s, i/ `5 A6 C3 _" C8 A2 @& I% v6 Q2 r5 \
成本低,易制作, R5 O9 U( T J) a# y' S
' Y) X4 }& ^* `0 c( L# k4 P# c! K% [+ E
缺点3 l/ T% q8 u( _) S
二维码技术成为手机病毒、钓鱼网站传播的新渠道2 w/ `9 y1 h0 D
" U) l s+ s% K; y( t( i: \
信息泄密
7 K7 ~( ^9 n+ B8 w. F+ r
5 o- V5 d- `( s$ W$ E2 @" B- a5 U7 h/ I# f目前流行的三大国际标准
0 o. F. a6 q4 G% q, EPDF417:不支持中文
7 D9 @% d2 U. [! \2 r
& F8 O! n% c$ v! k _6 h1 nDM:专利未公开,需支付专利费用
# O+ [5 ]8 j0 U$ h2 [4 }
% L% J' E( U3 E! i* ~7 k9 ^: J* U+ ?QR CODE:专利公开,支持中文/ J* J) r+ Y, b! ^8 V |7 U; N! F: }
$ H) C4 u, U4 }4 IQR CODE 纠错能力
& E& Y$ ?/ a6 p1 xL级:约可纠错7%的数据码字
- V, k& S$ u+ d G9 E/ d1 w* y1 ~$ y8 S z( \4 o3 `8 @7 @6 c
M级:约可纠错15%的数据码字
! o/ Z2 Q* L) J1 F, c9 l, c; R
( F! a, e$ w3 nQ级:约可纠错25%的数据码字
+ ]; h) l/ s$ f( m- r9 F* \( h3 A/ Z$ S
H级:约可纠错30%的数据码字6 p6 C" |% @" H L7 s/ @/ J
$ m4 i( A9 n3 [7 v s+ {! g
前提条件
1 W1 B& J3 K7 A# L9 ]! x: \GD库
. M2 G" z. t) y; y: `+ E( E w& ?& q6 z. Y a, _) P# a
一、PHP生成QR CODE
% y" E/ R* W6 e: {' S f+ l官网:http://phpqrcode.sourceforge.net/
: ` P$ {% L' X6 V) Y# i0 n' W. ~) O- s9 T5 a
下载源码:https://github.com/endroid/qr-code
! N5 b) l! _* G5 ^% H
! _$ S% i4 p1 R& S4 _+ ?目录结构0 A. ~: A" }% D6 B- W( }
5 g2 ^( K* E" e0 O/ A) Z: s- E, m: c
1、qrcode_create.php
6 C3 g* S; L g2 ]ps:生成普通二维码- { z9 B& m# @; f; W
# T3 G( C( P2 Z4 d- include_once "./qrcode/phpqrcode.php";/**% `! R7 |# }" F: [! n7 L
- / C) E8 T/ R7 F- ~3 O& P
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径: l) I" O3 h/ _( a( Z# W( Q
- # x. a4 C6 R1 O! k+ l0 ^; A0 Q
- * 在浏览器上直接生成一个二维码(内容为abc)
. a# i( T/ \6 f7 z$ @5 L
P! e2 L7 e, I x4 Y- */QRcode::png("abc");
, b6 j4 i' Y( s0 {2 u - ( e, ?2 ^& z- [
- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/*** u$ [8 @1 p. p0 u/ l2 I
& L7 Y( a! L' k8 t9 T& ~- * 生成文件到本地
8 f0 C* ?5 D( `0 ]- J
$ ^5 k2 D0 R/ C- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)7 B- L2 Y% F, T' W0 I: E1 t
+ k0 C! T# n" A, F) }3 z; r- * PS:$saveandprint源码的p6参数做了修改
G, Q$ o% o; o" `1 j" O1 t - # v6 q3 t1 o+ c- `
- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);
4 _, z& M' W1 E" U - , L8 w. [% A2 a) c
% v' L, K- z1 b5 n
复制代码
& g% I9 K2 j* B2 H T2 l( Y# B8 A2、qrcode_logo.php
6 I0 p) K* @; W, ~1 j, Rps:生成带Logo的二维码- 7 a" B8 S1 j/ o- p. G4 S/ |0 _
- /**& z) P! M" Q$ r$ C8 l+ |! S# I, M! Q
- 9 ?7 b3 h; b$ Z/ Y/ {: p
- * Created by PhpStorm.: u( I# N b0 l: B1 _! s% N
- : [# }1 | n R5 Q3 h4 Y
- * User: user
+ \2 f) `0 o. W( H0 Q M% | - $ ` |; G, n- w3 V+ s! X
- * Date: 2018/8/16
a; D1 |7 I/ w3 y/ E1 N6 o1 F
: ^; E F5 o# D o8 M- * Time: 10:43' P8 b2 l7 W- L/ Q
7 ?7 A2 b9 l' X; w- */include "./qrcode/phpqrcode.php";$txt = "测试内容";
+ `- d. U3 t, V8 T5 b
& e( @% [3 O3 Z9 J {) h1 L" i- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称
0 i. t" B! w8 f+ Q% }# U9 f
) N5 o7 Z- K! b2 B+ [$ x2 E: r- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是
' x" L! ^6 _# X" o, R( p/ E
# `% i3 U5 E: t/ U. \" l1 N1 Q- $margin = 2;//边距
6 e1 m' h" q5 A( u2 R# W9 G
2 e& u) W5 e; ` \5 l3 C: T- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片! L X7 ?# Z6 e
- $ J" g! c- F) Z+ w) g; ^" t
- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){
8 | K. i. T3 r+ c- c0 H2 N
0 q7 I8 _4 F; W/ m) r! _: b% ] Z- $QR = $picPathAndName; //已经生成的原始二维码图$ W2 O; L" g. r M
2 d# L* O+ c! r2 v0 N; B! H5 A- $Logo = './pic/logo.png';
1 {! X) P5 _: C+ Z' b" W - ' ]- e8 @1 }7 C8 [9 U! c
- $Logo_re = './pic/test_logo.png';
2 A0 `6 H ]) z; K* h. l* N
0 J$ t( H8 b5 I# M! @$ I; _- $QR = imagecreatefromstring(file_get_contents($QR));
& I1 k9 q% L. }3 d1 g3 \( Z - + n* f& \* n" B$ K! m
- $Logo = imagecreatefromstring(file_get_contents($Logo));
& C2 G: Q* p- d. b1 t
1 b6 J) B9 G @- $QR_width = imagesx($QR); //二维码图片宽度5 n `' D" C1 b
+ l5 {9 h& u, {7 i! X4 C# s `) g! m5 K8 V- $QR_height = imagesy($QR); //二维码图片高度
D! ^/ u2 r+ l( c, |
, ?- v, a# Q% o1 C) }- $logo_width = imagesx($Logo); //logo图片宽度
}$ \5 ]: F# R2 K3 q5 P4 C& l7 Q6 C - L& A3 d) u) l# S' t8 F
- $logo_height = imagesy($Logo); //logo图片高度" k) }; \3 W) [# |3 N7 w
- % D: G1 [0 Z: D: ]- q1 C" h/ z4 T
- $logo_qr_width = $QR_width / 5;
0 E5 B1 C8 g& _7 L7 ]# s - : Z! i5 N9 k- P
- $scale = $logo_width / $logo_qr_width;
7 I& w( ?( v" a' W- D - , ~" @9 }8 \2 s' f+ S* d
- $logo_qr_height = $logo_height / $scale; 6 @7 x0 w) R: {% J0 x( ?% Q
5 K" g1 g D" k0 H5 `, i- $from_width = ($QR_width - $logo_qr_width) / 2;* J# E2 ^2 f9 x6 d! A( m0 y' G
- % F2 ]2 @7 Y3 O5 T' I
- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
: k1 I1 F4 `4 P& U- M
; }3 \" j# i/ j' s: N- //输出图片; p1 C6 l4 E$ ^! a* x
. _3 s$ H; s3 q7 K% f8 w6 J, K7 B* A" E- imagepng($QR, $Logo_re);
( n. L/ p! ~8 }( T9 I6 l0 j
; T W6 L+ f% \" M2 x( `( l- }/ Y8 ]& V1 H9 v( s# h
- # c5 e! @: T& C2 _/ x7 o
' `) ?7 t7 t1 b) C; H& g. N' J
复制代码 3、qrcode_vcard.php (生成电子签名)' T4 U5 O/ ?9 E/ }) Q" q3 r$ q
4 x+ m2 ?- z1 T. X8 L4 d/ ^vCard格式:https://zh.wikipedia.org/wiki/VCard
/ I) z1 x& g A6 i2 ^$ [! S5 H4 J0 q6 O- w
- * i% z8 D' s( t# d6 o2 r/ w
- * Created by PhpStorm.5 d2 c; F" t1 J M. U; U( r: K
4 j( F* ~& L# X4 T* T, n- * User: user
5 E7 |8 E9 T, D' D _$ E - ! y2 O! B7 ?" a/ S- A; D5 z
- * Date: 2018/8/15
6 t( k; `0 g; R. v( q - ; u' x9 E% s) _, [* W' L
- * Time: 23:00# Q. O2 Z @* Z8 i# K# u
- 5 u9 g! ]5 t8 j, ?( [3 S
- */require_once "./qrcode/phpqrcode.php";/**7 [3 m B8 j. F( u. q+ O t) [" q* B
- 2 q) i5 _6 X7 K n, h) J$ S* n
- * 生成电子签名
8 E1 S7 j z, e) Z2 X- {3 R
7 M5 b" |' L6 a* |- * PS;使用微信扫描二维码
: n( F; g$ z# l6 O* {$ l; Q
) _' E/ H# M F! @. i( v, z, o- */$content = 'BEGIN:VCARD' . "\n";//起始标志1 i$ y' @% E2 h$ h% q8 ?* E
+ R- L0 k& M; g: z3 n3 h- $content .= 'VERSION:2.1' . "\n";//当前版本
. @7 z3 |! Q" f: \
7 l1 T9 ?8 p0 I9 H# c" [8 }3 T- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名
3 x. e5 y O0 D" g- m2 r' ^
3 M6 j9 m& P) C4 I- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称9 d- ]$ f6 ~( W4 R1 v4 \
- , o& Y: i: H- C( R
- $content .= 'TITLE:PHP研发程序员' . "\n";//职位6 ~, y% X, G6 a7 w' u
& e B1 B6 K3 t. K( [- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话2 |% z4 i& C7 I0 Y! T4 a3 B3 A
- ' I3 k( ~8 c/ X
- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址
; m2 L3 h! f$ c& S
8 @$ q$ c) K, g; N$ _7 _0 l, I- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)' q1 o( O: @" ~/ ^# I" ?" I
- # k+ V* a% H; \3 ]- i' d& V/ t
- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话
+ H6 a& a [1 X1 @ S! q: j9 T
8 Q# M2 ^+ l: _$ i' K+ \& t- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱
" l1 J) O5 V$ y& p& G* R) H* k - ; p6 e0 {" t/ C1 @8 G! j6 |2 U
- $content .= 'URL:www.baidu.com' . "\n";//个人主页* F! F/ X% B' S( z# r* B7 Z5 H0 [
- - R7 V/ z0 P# [
- $content .= 'END:VCARD' . "\n";//结束标志
I3 `( ^0 Z$ H7 q0 b t - - @2 l/ \/ J2 A' b R+ H4 d3 V+ _
- QRcode::png($content);
8 r: L0 Z2 J w+ [ - # Q$ v7 n5 v1 M) N* z: m% r- S
- - J: r8 U3 T' \3 {% B1 w
复制代码
1 y; v1 q) g- U相关文章推荐:) l1 |. i' {* f( r, g% t" Q
1.PHP生成微信二维码实例3 {7 l( S. s3 x; u y2 H1 n
2.php网址转换生成二维码* ]. Y, r$ o w& r" T) c
相关视频推荐:) z; _: A& s2 _3 g) n5 q$ u8 l
1.独孤九贱(4)_PHP视频教程9 [" d- x) d# Z! S) y6 S m9 {
二、JQUERY生成QR CODE
" [9 |8 c, M* q7 `8 I6 b+ f1 p源码地址:https://github.com/jeromeetienne/jquery-qrcode7 c3 f ^+ V* {* q) u
- {8 `& K+ {; W0 ojquery_create.php
2 k7 H, T' F- {$ U* _( [) |- r
' [! q+ ]; H/ _2 X" ^! [- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码
% p1 B" ~$ ]$ D- b& T# {% S: T% V2 C* ]三、PHP识别二维码
2 Q! u0 { ^* I/ S1、方法一
* z% m+ d- i8 f' f+ ]! y$ q- M环境需求,安装如下扩展/ r F3 h" I; R4 q }2 H* p
- ImageMagick% y5 }% q0 Z5 B$ L
- zbar, U U. f5 Y! }% F
- php-zbarcode
) H$ }6 Q' y7 x4 k: h$ c9 k! A( k, h4 k% F. G
2、方法二
" b& a& L m% e5 I, k: a4 d/ m! QPHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以1 m+ M! T7 T! s+ V+ O/ S
qrReader类:https://github.com/baagee/php_QrReader
1 I' F O& `' `5 D% E! D9 y3 K+ d3 b7 y
- . M& X0 b8 n! L5 r' ]5 G
- $qrcode = new QrReader('./test_logo.png'); //图片路径
8 k% j0 M6 b8 k! |6 ~ - * B2 @2 p' k$ u0 b2 l: ]7 t1 U
- $text = $qrcode->text(); //返回识别后的文本$ n: m7 C" d5 Y# q6 ?
- 0 l; E0 C% ]" k- s2 L: U
- echo $text;: a! R* C5 O- ^
0 O. c+ L6 G) @" x7 _) i- ; q* Q! D* P6 U# ^$ x) n% U; r
复制代码
}: u C0 u% C$ i链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7) n1 I. p; k3 t5 h# K5 o) `
2 M% H0 z, P6 R/ ?. J+ n8 f
! X# T/ T$ G0 T0 I
/ D9 l' x8 N, @! T& B5 x2 G% J
9 X+ [' m" d5 r* C0 [ } d0 [! B' C$ Y: d' T
& H% P7 v8 Y# |% k4 x# z
6 m% R& o* j. v6 o" E' i
/ V) o9 d# u2 a' }; n4 h! L
. P4 N/ b2 @6 u( }& G) ~
|
|