本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。8 B Q0 ~. u. a- R; K' o# s5 P2 r2 ]
---------------------------------------------------------------------------------------------------
4 c3 o: u3 g: l, X& g) Z- y二维码的分类
0 E5 } X$ B5 Y; J- W) g线性堆叠式二维码
, Q h# P- m7 Z, U1 l* v7 a9 Z3 c8 `, y" f
矩阵式二维码
2 L8 `3 _, V% `* |, q: f) n7 y& i; F }, B. g n" Q
二维码的优缺点, Y+ W, g5 G* P8 y; e1 ~
优点1 p Y% o' Y1 S( q7 k
信息容量大
" W: i( M$ ]5 A! K& m# ^, R R5 c1 ?* R/ d8 J/ C' ~
编码范围广. I) K! G5 s+ ]# K- V7 a( _6 K
* ?' q Y! U$ e$ M/ `+ j$ g ]容错能力强/ |9 O* A0 L6 D- H+ m- ~. X
( C; D, R, E! |. R
译码可靠性高$ {7 v7 b7 w4 g+ N6 H
* n; u' P& J9 S0 w) F7 y可引入加密措施
9 O+ A. n8 ? `# H+ O- a5 y! U! c( J: Y W+ {) [- x5 S
成本低,易制作
; g% }" V" W+ P7 p d: j$ j
3 i3 n' X3 ?0 U0 S( v5 n7 ]2 w- U缺点
& J5 {0 E8 ?, F# [二维码技术成为手机病毒、钓鱼网站传播的新渠道& N3 a$ c* n5 ^: b/ t6 _" B
) ]4 i' B; I% P* o1 g- V' k4 U
信息泄密
8 M9 a$ W( |# n" F: Z
^) u) p! `6 M+ n7 g7 q/ ^目前流行的三大国际标准 E3 m- _9 S+ Y
PDF417:不支持中文, e2 }8 `# i. ?# _+ S9 g
) [* D+ X! E. _ w1 VDM:专利未公开,需支付专利费用
6 ~- T8 D$ G7 V2 b8 u4 W0 D: x! p7 U1 s, Y3 E p6 d
QR CODE:专利公开,支持中文% U7 B" D* P4 S3 W% }+ i
- d* V8 l) v( J, `" d: R; z
QR CODE 纠错能力. X9 w1 P- Q* _9 `. a" w
L级:约可纠错7%的数据码字
% Z8 t/ W1 U" U+ A4 ]6 F
9 N3 {" i$ W; v) t7 y/ S2 }M级:约可纠错15%的数据码字! F) q4 O* f$ m$ {6 j, K
" }9 h" ?4 a* Y3 ]; c; T% K
Q级:约可纠错25%的数据码字+ i& W$ u% w& `; [
5 |4 r; V' }, f6 l6 J
H级:约可纠错30%的数据码字 V0 _8 a- x9 l: Y
8 U s/ K' h, o! T前提条件2 i q$ J" @$ O% e& u# \2 `
GD库
) V: T: q$ Y, @! k, Y- S$ x0 N0 T! w8 c
一、PHP生成QR CODE
# L4 Z& N/ e0 i' ?# j7 w官网:http://phpqrcode.sourceforge.net/& H# }% w: I6 ~6 f9 c0 M
0 `5 j7 p4 M- T% S下载源码:https://github.com/endroid/qr-code
. T& w6 }( s" B. G3 J0 N
4 d Z& a9 R& p; L目录结构
; F, R; K& h4 ^: b" t) a% K
. g3 P' Q: l4 b; a1 O0 K- w2 r5 K8 K1 w' E/ N6 \* s' l
1、qrcode_create.php
/ K0 \, f! r& Ops:生成普通二维码
" V$ r" V4 ]. x4 r! A5 u, c0 X$ S" f
2 w$ t& N; {/ v5 M8 x- include_once "./qrcode/phpqrcode.php";/**
: l2 F* I6 }# |0 e/ _
! E" V, }% ~! T, e$ o# ^- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径
4 V7 L% @" N% I, u
- m. C }' M5 W4 r" V- * 在浏览器上直接生成一个二维码(内容为abc)
9 \0 F \5 p+ L* }. p; n
+ ~+ W) }: t e- */QRcode::png("abc");
+ K. _) A7 p1 g, Y
, h) o# A2 o. G H: S+ z% N/ {# |- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**
- q/ J" w# L. A B, n, b - # N0 {$ P9 _. r
- * 生成文件到本地
# L- {7 r$ O2 C0 c& d - 6 x: |+ U7 K7 G8 n& c
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印); b3 w% G1 C2 g O
! N4 }4 H' r* N8 A- * PS:$saveandprint源码的p6参数做了修改# X! H+ _3 y- A* Z5 s7 S
- ; v U+ b, R* W t. J, w
- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);9 p: M7 s& N, q% D- U0 w a) }4 B
4 h% X1 Z9 u4 w7 F) p$ \
/ r: {+ i2 m b9 l$ e% h
复制代码
. ~ C3 |/ N( n3 D% @2、qrcode_logo.php' T$ V# p J2 ]5 f* K
ps:生成带Logo的二维码
, \5 s8 f! b% X! B! w' j- /**, c* y/ R) y3 L: W0 W
2 r% {& [- k/ I. m- * Created by PhpStorm.
5 y& r( F! V/ t3 {! W
2 p* q: F5 o/ c5 ] d# d$ ]8 l9 u9 c% ^- * User: user
0 g, `* A( |0 C: Z - . Z. M7 j+ } X- w1 p
- * Date: 2018/8/16
+ k/ T( F; G4 J- V! U! b s - : G4 w4 k/ c: i8 [) h; v$ j- d* a
- * Time: 10:43 F5 ]- q) t: e# O, A% W! {
- _ c! m8 v/ J1 Y7 _' w3 [- */include "./qrcode/phpqrcode.php";$txt = "测试内容";
5 z4 I; {7 `) @9 n1 c" N T - 9 P+ y' u, w _ P' `8 f
- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称
+ @0 y5 Q8 J8 w2 |3 h - ) u. v. v2 e. N. G
- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是; R. w- F4 v; {; d
- $ ^$ g0 c7 x* s' c% E, j
- $margin = 2;//边距
# b( Q/ H* N# y7 h1 Y+ }6 [- [4 O - 3 V6 ?/ X8 I6 c {. S
- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片, L Y4 V& o3 M7 J6 X
- ; D" P4 i! H6 @4 {3 E5 K6 Y; O& S; e
- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){ x! L" I5 K* ~5 a. G" [- s h
- 7 ], G2 B( R2 ^" U
- $QR = $picPathAndName; //已经生成的原始二维码图! K# K; E5 d9 `0 w) ]/ r: O
$ L, D t. @ _3 }- H8 O- $Logo = './pic/logo.png'; : v1 e$ l4 G9 M; c
" g1 \9 G. Z% ~' a+ Y- $Logo_re = './pic/test_logo.png'; : H+ r0 c; B$ @
/ Q5 C7 d& w3 y6 }* S& R- $QR = imagecreatefromstring(file_get_contents($QR));
, ^2 l2 d4 W6 U3 f$ ~( O6 z$ z9 H - # U5 ]+ F+ R0 E2 i+ F: x* ]2 a
- $Logo = imagecreatefromstring(file_get_contents($Logo));
$ a5 U9 Y7 @! a- `: D - : q& @. o- g* D/ a( P$ |
- $QR_width = imagesx($QR); //二维码图片宽度
/ t w1 K, D7 A6 R! Q. ~3 A' { - , L; @. g% [, u* i# W: k* C
- $QR_height = imagesy($QR); //二维码图片高度8 R/ N5 E+ N; r9 Z* W$ Y t$ {
}8 p/ h8 M' s! T! B- $logo_width = imagesx($Logo); //logo图片宽度
' `$ v, x& k' K - $ X9 Q2 H4 y# }/ z
- $logo_height = imagesy($Logo); //logo图片高度9 Z* w/ K# N& Z8 n
: r; i, Y! {! S: U& i& X+ C/ o- $logo_qr_width = $QR_width / 5; ( E: n2 ~+ Q1 Y+ E5 w. r1 y
- & O4 R, u! A$ F. Z) T
- $scale = $logo_width / $logo_qr_width; 1 @" B2 @# F- d5 b7 i( O, K
0 W2 E1 m* M6 H5 e4 d; h' |1 c- $logo_qr_height = $logo_height / $scale;
: r% i# ?0 D& x/ R- Q7 b; p: s
! w, z. `" a! F, D5 b- $from_width = ($QR_width - $logo_qr_width) / 2;# Z. N! f* b( t# x/ i: t
3 i+ O. b8 f) M- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
( X% A z% U5 c; ?9 d0 z% M9 u
- Q% m. N3 d& x9 J' q0 m- //输出图片
6 d2 K. l2 g' B - 4 [3 F% h1 O5 l& ~
- imagepng($QR, $Logo_re);3 q4 ^% Y) p4 d+ h* d% {
, b2 L; m$ w* q9 @6 {- }* {4 q) ?/ {0 T( I& Y% n# d# ~& m
- - u/ R& u% I! g6 ]
- 1 C" n& _7 z. h" o) n" p
复制代码 3、qrcode_vcard.php (生成电子签名)% q8 G% @% a7 {2 a8 O: P
) B6 n% B. L( J' w: U& ^6 _- _
vCard格式:https://zh.wikipedia.org/wiki/VCard
; i6 D, O4 X7 g _- _" u
4 p Z1 F; l0 W9 W6 \$ j- f
9 @# D; I$ V1 m& F- * Created by PhpStorm.
4 D! B4 h% T3 d) V; [ - 7 E) j! M: j6 B0 i
- * User: user _) G7 t/ R' w0 j; i+ c
- 5 _8 h! F8 C. g2 T# @
- * Date: 2018/8/15
$ H/ ], r+ V& n
6 t* E" i/ q; X1 E* L- * Time: 23:00
# P* r( E/ G# `% j3 G - 4 c4 \( }6 \* p$ o
- */require_once "./qrcode/phpqrcode.php";/**
% [3 b3 m& }5 i: l; I7 C6 g2 x
0 U! t% ~2 _+ [) u' A, V- * 生成电子签名; l, n) U* h! b; x" ]; f; e, F
1 y9 b" D- ?' d4 h# E: l; g- * PS;使用微信扫描二维码 M5 c E; K1 Q/ r8 l" ]6 b
5 `$ @1 p$ V1 M7 u- */$content = 'BEGIN:VCARD' . "\n";//起始标志
3 m$ h7 L4 k. y# B8 X, n8 Q7 } - 0 J/ ]& [8 V+ J" O2 G3 ~
- $content .= 'VERSION:2.1' . "\n";//当前版本
1 Y9 }2 o2 I) }7 K! P - 2 {; p, D9 P$ a5 ~) G9 ?8 q* [
- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名: S* M1 g( |1 n8 t
- 2 d- ?) W9 F( Q$ b( c" B1 y
- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称0 ^- j, G7 q# l/ S
: m. T! x$ L% d) v' t- $content .= 'TITLE:PHP研发程序员' . "\n";//职位
. P; M! P5 P0 j# K+ v
& h: @: _% f' W, }! J# e- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话
5 e- {4 O/ y" Q
8 g+ x5 q" s( U! _/ n3 r* e# m; D- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址
; R7 q8 }& P( P; k: E; A3 ?4 D
' \$ a/ B; Z% _9 @/ I2 t: z2 {- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)
% t: q) O9 V4 c$ q e3 c3 E
+ M" |. a, f) J- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话
) o l4 ^% Q7 r
! ^, `- q8 u% \* A+ [- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱
& s5 D, k" w5 k9 M+ W( O# o
K: e% d+ F% Y, M6 z- $content .= 'URL:www.baidu.com' . "\n";//个人主页
. N( W( k9 Q) S g. h) f - U9 m4 k C% d$ d! W
- $content .= 'END:VCARD' . "\n";//结束标志
/ u/ X2 z" a2 `( A( A! V - 3 _# V8 I8 u, t7 J5 [6 I; b" Q
- QRcode::png($content);5 j- h# a& B( E' i" B; W
- 7 w# S( s2 _) ~) v* e
1 d' z9 a, @( B6 B; ?7 u
复制代码
% `+ p' b3 ~4 ?+ k9 T& t X9 b X! K相关文章推荐:
/ C2 ?, Z( g( i+ z( D0 j! q) P: M# H1.PHP生成微信二维码实例
6 f2 t' i' ^. E7 n2.php网址转换生成二维码3 s6 H0 p$ h8 [. w9 D
相关视频推荐:9 j, A! L/ Z2 x( s
1.独孤九贱(4)_PHP视频教程
) t5 `- [4 o, a, { b* O0 \* w) d二、JQUERY生成QR CODE
2 B7 D0 C* W& P& r% m) s源码地址:https://github.com/jeromeetienne/jquery-qrcode
o. L0 k: `: ~0 I
- V q9 e" ?' w$ W0 J' sjquery_create.php
0 i: e, z) }( m6 K5 r( N* J; K8 p, z$ b; D/ Z0 O
- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码 ; p7 \& }( i7 f' g: A4 [0 p
三、PHP识别二维码
J* U4 k. C4 C5 V1 Z4 A1、方法一
# }; X+ u- R% H' [7 ]* |6 |1 r环境需求,安装如下扩展
# x' q) y% d# `- ImageMagick) V' p3 t3 u# N5 Y; `* k7 y# o
- zbar& q' K1 x. a( {$ V8 G
- php-zbarcode
0 ]7 Y, r4 Y. G! Q" l: @
# d7 P, c. T1 R: c2、方法二
3 ]7 L/ }/ D0 g+ t7 u: x. Q/ jPHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以
+ U5 v' J4 }0 N |6 u$ QqrReader类:https://github.com/baagee/php_QrReader
5 w" p. { C) |6 S* h7 V! t$ }8 {/ @ g$ B* V1 L
- 4 z3 R- ]; T$ ~
- $qrcode = new QrReader('./test_logo.png'); //图片路径
- s" i6 b) p! B$ Q4 A! n
# D: H- c) ?" x$ z+ O- $text = $qrcode->text(); //返回识别后的文本
! Y j/ X) u9 D, t - & x; Q1 B7 @% j; L9 _* [0 {
- echo $text;2 ~, k5 p; I2 ?4 E2 D& l6 h
- & n( ^: T' S% j# e( V
- 7 f* R, i" K' _( R8 W2 \$ U% @
复制代码 & [! T! M" C/ M% Z, P
链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7, P9 P# [, h7 X/ H
% U' k4 i! u( e- J! ~+ Z6 F0 o
" z8 d( |6 o4 r; S$ K2 g% Q/ O' F
: A# ^- O# I% a/ v' F0 v' w6 Q5 c: H
& \' B+ m8 j- R# B4 U2 n& I
# V. y: X$ Q* H2 O4 w7 p5 D0 K2 o% \' k
& L! v' @$ g. [
2 @; u- o" z; Y+ T
$ q5 W g1 K! b
|