本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。9 E# a( o$ G) h2 }9 o/ {1 d5 A) d
---------------------------------------------------------------------------------------------------% v y4 g7 h: L
二维码的分类& r% `9 o8 ]0 `, o3 }& T4 o6 r
线性堆叠式二维码* t. @0 p7 f; J- u8 w( r
6 s: j" s! X' u6 Q$ U. M
矩阵式二维码
% x* n& M; f2 x0 y" Y; e5 o( R0 w4 j2 p) v% J- G9 h/ G2 h5 L, Q
二维码的优缺点
# v" @8 I* t6 A6 N b" ?9 V+ L优点
0 n5 r# [) H# T$ B! R; F信息容量大
% a9 T( O' k/ D' j8 f/ y# x& g# ^$ I" z, Q8 }' r
编码范围广
2 c0 U/ ]9 k+ b$ O9 P
W/ ?- W4 R' K3 T+ Q容错能力强' V2 b) ?) d) F# Z$ @. p# U
4 t2 i7 }0 V$ W
译码可靠性高
4 {! Q$ H" \8 i9 S; H }, V* C, E* e& |3 @; c7 P+ I( x" o
可引入加密措施
# q- Z: s) v% s4 }+ p$ B4 E2 Z& C9 ]$ u" K; f" \- c
成本低,易制作. z3 i& {( @5 R/ L5 [
: q4 ?" t7 P$ K* \* f缺点
A9 x& I, O1 K1 q/ @+ E二维码技术成为手机病毒、钓鱼网站传播的新渠道
2 T; f. T2 w E4 b( `" @) k5 y% L) ]7 ]3 r
信息泄密
$ R% H# [6 ^ `* M/ ?' @5 Q
9 U# l9 m( O, t9 j( @) d5 }$ o目前流行的三大国际标准
2 H* J; u' ]4 G6 X w/ @- ?PDF417:不支持中文
# z% U; _7 l4 h; {
3 Y0 {+ l8 t# O( ?+ R SDM:专利未公开,需支付专利费用( c; R( G7 z7 { x2 ^7 o! C9 i6 @
+ _4 I9 o8 Y# \- K0 g, G1 o3 YQR CODE:专利公开,支持中文
1 I. p, b: x. I- R
; N, J$ ~9 F' _8 q4 EQR CODE 纠错能力/ x6 v( f [; y! n7 B3 H* q
L级:约可纠错7%的数据码字
- {3 c) K# N) j' k$ z6 b, }1 p, ~" W( x3 E3 W5 N1 g
M级:约可纠错15%的数据码字9 ^* S, k6 E* i* m# H5 o
4 q$ l; j' T; \
Q级:约可纠错25%的数据码字
; V5 B# W6 V# M7 i
0 b; g0 @4 o/ F6 p9 j4 |H级:约可纠错30%的数据码字0 z8 n9 O& F; [/ D# E. N
( A! ]$ s" L5 |9 G3 L4 h' m
前提条件
4 p2 E% E$ r+ ~4 `) Q: OGD库
0 M* A2 ~! S( J+ F0 J3 K
! v- w6 v9 M* M8 q一、PHP生成QR CODE
& o+ o/ \1 p3 D1 v官网:http://phpqrcode.sourceforge.net/( ^2 {1 E2 i8 Q& N% l2 @; L8 ~
/ @$ C$ ^3 c7 c3 {; P下载源码:https://github.com/endroid/qr-code5 ]- i6 q, P6 V& l7 \
5 I# \7 B0 R, Z8 `) A( Z* t8 e目录结构! `3 _( b* ^, z+ j8 T# b1 P8 i
C7 l* c/ w+ J) p% N, B& c, y6 b7 H E8 V+ c' w. T3 q
1、qrcode_create.php) x; i1 f6 r5 R5 i/ H2 P( ^( t0 v
ps:生成普通二维码7 E8 Q$ N$ H! B- L& G: c4 q+ h3 f
( f1 P3 W1 W2 }. E; O- include_once "./qrcode/phpqrcode.php";/**$ s' f# o% D6 k5 t
- 7 m6 p$ c: q" c( V9 T, H/ V, ^) s; Y
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径
4 a0 e# H8 C' x6 D, }" n - % |$ C! M* u/ {% {
- * 在浏览器上直接生成一个二维码(内容为abc)2 A" C" M) C! G9 m2 o6 a
- * A$ L. u8 h6 Q, L" |
- */QRcode::png("abc");4 j( [. D2 }2 {9 X: v6 ^
1 `. x" e7 e7 V- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**
) X, }. x% j+ a) ?* F- h
, I; ?- K6 ~/ W1 t- * 生成文件到本地
# t7 t) d: y5 g5 y - 4 N5 x9 _1 Z: A' O
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)
7 x) q4 }$ L' ~3 j
4 O5 k& M, B: d2 g9 K. C' ]- * PS:$saveandprint源码的p6参数做了修改. R" `! S) g( q' N
9 w- q' k6 y6 {) X8 k' t0 B) X- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);
" ^9 k# c7 X2 u7 S3 ~
4 Q; ^# P( l' a8 v r' U
4 c \* [+ b6 A' ` \0 j8 h
复制代码
4 m3 b* L. a; }- J2、qrcode_logo.php- D( P9 e! z1 r) {* S+ m
ps:生成带Logo的二维码- ; E2 g7 Z2 C; @6 {! S& D1 R2 ]! j7 G
- /**8 d3 D) E; c8 p4 f7 Z; N' j4 E) Z% w
3 j* Q L$ z# d0 o- T- * Created by PhpStorm.
8 I- O+ m# e. K" O( d
; r( S/ m" q- |& }1 a0 ?6 m- * User: user) h5 a' \3 R# ~8 y. a# L5 G
- U9 a0 Q5 m8 m' X8 V5 e+ T" E4 X5 V- * Date: 2018/8/16
- r1 k4 i% a6 n9 { - - n* R+ }" D4 A) c4 I* T
- * Time: 10:43
% v* S. u9 P! r; a7 R' o: } - / X" Z% C- T/ d8 ~' c$ e0 N
- */include "./qrcode/phpqrcode.php";$txt = "测试内容"; G: m, F3 W3 Y$ t9 x5 A" u+ U
- 9 w1 G! X( d. a! ^. U, @: p
- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称* |/ _1 W) b8 {. u4 C
2 m3 \! I# }0 ^! U9 x+ { ^5 b- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是
8 f) D4 @) E4 [4 ]. [8 [
0 W# Y+ x" {+ a7 B0 y- $margin = 2;//边距
8 P7 T* w5 o/ C1 E7 n6 q - % ? I5 E4 A4 `4 m: W
- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片
v. m" w6 ?) d- }& [ - $ ?: O& Z% W3 N7 S
- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){ 7 u% N& D4 {3 U$ x/ k
- 2 t( h! o2 e8 `- q& ?( M% |
- $QR = $picPathAndName; //已经生成的原始二维码图
( G" V/ A4 n" i" F- E0 {
( {' @ d5 Z7 _# R M6 C- $Logo = './pic/logo.png';
) R) T8 L, g) c - 6 Y: d- C5 x. ?
- $Logo_re = './pic/test_logo.png';
* J5 h, L7 h9 Q" R. u! z0 L/ ?
k) f; j& [9 b6 x- $QR = imagecreatefromstring(file_get_contents($QR)); ( D' I8 I& [, ?7 C4 G9 S' e# h
- ! }/ u! J! `+ N3 X
- $Logo = imagecreatefromstring(file_get_contents($Logo)); ! p6 ^6 u& B" h% J; r& X4 A
, ?/ ] O0 n3 x- $QR_width = imagesx($QR); //二维码图片宽度; ~1 p8 J) @2 P2 O0 N/ n! z$ d
) x8 I- A9 W/ B. A2 O- $QR_height = imagesy($QR); //二维码图片高度
& z- z# R) l9 F _
/ G7 h0 g5 v: d; F' O- b1 k- $logo_width = imagesx($Logo); //logo图片宽度
! W2 Z3 q( S, \- d$ v3 K
! C" X% s8 A8 Z i& M- $logo_height = imagesy($Logo); //logo图片高度9 Y- O3 `& [) _! v
+ d/ t* d, t: {( S$ a- v8 m6 |- $logo_qr_width = $QR_width / 5;
) }7 x' d, @( R6 m' j+ L# c7 q% q - * \- z4 z* r/ m6 J3 g: ?
- $scale = $logo_width / $logo_qr_width; 9 F) e5 c b$ L
& Q2 q. W* M& p- $logo_qr_height = $logo_height / $scale; . U% E! z+ p( {0 ]5 O0 f
+ n* d! p x9 a. b$ `* X2 R- $from_width = ($QR_width - $logo_qr_width) / 2;
3 S* _' {* x& _) e7 S
+ m! \& {2 I3 C/ g$ W% E* ]- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
# G8 N; V2 ?$ n, ?
8 ]- o' q" k% `' z- //输出图片. m) M- W3 \* w+ S2 a
- 7 q3 w) {" i8 A; K
- imagepng($QR, $Logo_re);1 h6 j7 ]4 D% l- v8 e" Y- u2 Y
- ) w, k5 f' z' p; G4 B; H9 i
- }2 s( J' v7 `. Y; \8 p( z
& w, G/ [# D. ?: Z# y- - B6 i6 @- W8 f! T
复制代码 3、qrcode_vcard.php (生成电子签名)
5 V' E% Y( A# D/ B. ?1 u# m
& u; e, {$ A4 jvCard格式:https://zh.wikipedia.org/wiki/VCard
4 @1 ~" [! B0 c0 ~4 R8 C6 S0 |; q6 X4 r3 C! E
, C: r4 Y0 g5 X* t- * Created by PhpStorm.. ~4 M; d& J3 c8 s! F
- ! x" i, N# t7 T, n D
- * User: user& s; y5 }6 T( h! e% y
- 0 Z" _/ f4 \3 w! D8 A
- * Date: 2018/8/15
4 K. d" _) \ C3 Z
6 ~4 P0 Z9 c% f: e6 k0 A$ @/ ~- * Time: 23:00
! s$ T* X2 e) @9 h' k3 }' B - 3 p4 [# h, b8 e( t
- */require_once "./qrcode/phpqrcode.php";/**
; M! J3 e/ F3 V' a% {" k
0 M3 g* F; f7 X k) X8 u* L- * 生成电子签名
9 r2 l/ k0 w% @ - 4 L9 \) J5 j0 r! m: t0 K2 S
- * PS;使用微信扫描二维码# S0 l+ d6 w5 t, s- P! d/ F- R
1 D) p$ }: _4 U6 p8 j; O- */$content = 'BEGIN:VCARD' . "\n";//起始标志
1 `( T, j/ K' s3 L$ s+ m- b
6 F. f" P- O2 j8 j: B- $content .= 'VERSION:2.1' . "\n";//当前版本+ G2 o/ D! H& Y$ h( O/ {
- 6 y) g% X% W% N
- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名
# D1 V6 ^+ p! v1 X- h3 t5 t - 0 T3 H5 Y. s/ ~- ~
- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称 O& y% ?9 ~9 k
- 4 j- [: i. K$ D$ l) j! d
- $content .= 'TITLE:PHP研发程序员' . "\n";//职位
: |7 b9 d6 d# B+ m+ `5 J$ i2 |6 U
5 P" u# P9 q l/ b/ p* L- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话
& ]# g$ _1 t" T8 W1 t
/ h0 w b2 T" R% e' d& v- `7 I: n- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址
. F- `0 b% u- s$ e2 K P2 a6 F: ^
# E6 Y5 F8 ~; a; M% A8 S- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)
* Q- U2 B- J: [7 F9 m1 x* \6 |
& m7 R/ t) _* r2 P4 f' b- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话
# L& e+ _2 [- ]% J$ j5 `, q9 o% m6 ? - , M1 R+ E! @; @) r' [& z
- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱/ ]7 t- q; V1 n0 u
1 K. N8 v, v6 M5 ?6 I# h7 h+ T! g: S- $content .= 'URL:www.baidu.com' . "\n";//个人主页8 w( K4 u7 o! }# I- q/ A# M7 X
9 E) L6 k+ l+ D. O% k" X8 Q# E- $content .= 'END:VCARD' . "\n";//结束标志/ i* X! n0 B( X4 J [# f. v# ]3 }& e
J/ Z7 B; B5 m& @- QRcode::png($content);$ h: G8 g$ t+ T' g9 M
+ A, l0 o' n' `' a1 m1 s" N/ B$ ~- F
. A$ N" f; g3 E1 f7 M
复制代码
/ o. b) C7 I+ b0 o0 s- |, c相关文章推荐:
9 O% `& U& Q8 b q Q4 Z7 |$ f1.PHP生成微信二维码实例
, Q& F" s8 t b+ z6 J' E2.php网址转换生成二维码2 s! K9 {, L. I: f% [9 O5 g: @& h
相关视频推荐:
& v0 S$ [/ [! H6 j% E4 a1.独孤九贱(4)_PHP视频教程8 b' @1 O7 H) N9 ]: [' o8 r
二、JQUERY生成QR CODE9 |$ ^# I3 z) n1 i; C X! L7 w
源码地址:https://github.com/jeromeetienne/jquery-qrcode
7 k3 u2 E3 u7 T0 D
( G0 B: g h* c1 K- ljquery_create.php
W- F( k5 p/ R& `! b/ s
0 y. D- M) A/ [( f- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码
5 m1 i7 L- d% n8 \三、PHP识别二维码
4 L% E( W9 U, C/ P2 a o5 Y8 u1、方法一
. s( Z/ X, x3 J4 I* Q7 L* l$ a4 N) j环境需求,安装如下扩展
8 R+ G5 Q' @) M6 V- ImageMagick
$ b: F& Z- Q2 J- zbar
, O0 ]$ A" i4 x5 d* l- php-zbarcode
8 v# l' K. J# z
5 D5 o/ L6 D$ x2、方法二; L1 U/ ?' U4 x- }' o# l: w
PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以
% O) ?- ?7 {4 H( T. tqrReader类:https://github.com/baagee/php_QrReader g( z! E7 x& `# T) u
' W5 P4 N0 R' U `/ b, v- + D/ w! l. b$ |
- $qrcode = new QrReader('./test_logo.png'); //图片路径
7 z Y/ a6 M" {9 @/ N" M" S - 9 m7 P3 r3 U4 T" I
- $text = $qrcode->text(); //返回识别后的文本
. X; x6 t- H. d* U3 B - $ }3 {$ K5 [: {1 H
- echo $text;
8 q) C1 J9 J+ p, R% h9 z - & j A/ y5 `* |; K: X0 ` j
- - k% M0 V9 u- L" `. X+ e% }
复制代码
5 M% Q9 j. V6 A3 e链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7, i, W" v9 v6 U, k
/ l- a. U* b& {- k V
* ?, ], u( }7 N3 M8 F" s% r5 z* |' T ]
) R' r J) N8 R) \
5 S8 u/ O) \& V, m0 [2 F& |' I p/ J4 b* Z1 a/ ^
/ h5 z, Y A' K# A1 @$ b7 B
t- e2 i, A @, U0 h$ n" Z9 K! s$ [+ @ {4 B& f
|