本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。4 M1 S1 l3 A& t6 g8 H4 N
---------------------------------------------------------------------------------------------------
* x8 @+ ?& }8 Z* f二维码的分类
6 @% q. g! j1 u8 Q& [线性堆叠式二维码7 H0 x- t% I% Z! @0 f
6 z, c Q0 A8 s6 x0 D) F/ e
矩阵式二维码
/ \0 H* s+ b% w- O. [/ W
8 M. H% h7 p( N4 e+ c5 b4 B二维码的优缺点
* \* O0 A. J- ^) ` N优点& t7 t# @, r# r: w& Y" M# ?3 e
信息容量大# S O% p! I" {* ]
6 ?' O2 B& z/ C! `& [' h1 ]
编码范围广- b4 p% {) P+ F) p9 j# P% i# f
/ K4 Y6 \$ M: c( T
容错能力强
9 m$ j; F$ R1 d! X1 y3 L5 ^3 }0 x4 \( ^( D$ n
译码可靠性高, T5 d; n7 h" m* e2 c1 b
+ w* s/ C$ l1 Y$ X* w( u) z) R
可引入加密措施 U: w1 ?0 ?5 b4 T' U* C" K
# A8 F1 A' \8 P/ ]3 n8 x7 q3 o
成本低,易制作
9 ]5 n# }5 m9 m9 x0 S
4 v) k5 M2 R' X! X缺点
- @3 W0 c: p2 ]二维码技术成为手机病毒、钓鱼网站传播的新渠道
2 s+ t' n$ P* S1 f6 v B7 _6 w- ?3 R! U+ c1 L: Y4 i1 V
信息泄密
5 O( n0 h% m0 \7 A4 F# J5 O, q
+ O$ C( C1 J7 O2 r( r% t目前流行的三大国际标准- P7 Q; B1 E! N. f2 Y) w5 T
PDF417:不支持中文
9 L, F8 Y6 W; M) ?* h4 g, _' ?
1 j2 x! j% ?6 y) fDM:专利未公开,需支付专利费用
/ O2 I+ l6 B8 Y+ u6 W/ @ q3 U; z' ?, y: X: E
QR CODE:专利公开,支持中文
! i! a+ d. K# [
3 Q4 L( _% L# KQR CODE 纠错能力
& x# ~5 J9 P, ?0 B6 SL级:约可纠错7%的数据码字
3 V4 w* X/ q! \+ v* K. _$ }9 ^ w) S
M级:约可纠错15%的数据码字; Q& L c8 M; {3 d8 |: Q5 v
- i$ E* H" H% M6 E3 r! {Q级:约可纠错25%的数据码字
+ [" K* }; L* h) T' C. T; w; J/ U2 i2 Z, R% n. e
H级:约可纠错30%的数据码字
/ ^7 x# M& s+ O/ [1 v5 L4 Z5 v |5 T* C5 Z+ {0 ?) w
前提条件
7 x) A6 C+ K; B, iGD库8 t/ o$ Q/ q( P8 E8 A: g) ]
' R" G ~! f2 N
一、PHP生成QR CODE4 i2 @. q: x6 ~! b
官网:http://phpqrcode.sourceforge.net/
# S i$ g: `6 B2 Q4 z9 B ?7 ~
8 t9 T5 G# m* i% w6 Q下载源码:https://github.com/endroid/qr-code7 B5 c# Z8 J7 @ @3 G- W
. l+ U: ^( f% e目录结构
G8 Z' O8 m' s
" m9 L7 i P( @* O8 c
/ a$ g5 |# y2 M$ I; n( O+ K! c1、qrcode_create.php
5 s% M! O( A2 `1 Z Zps:生成普通二维码
0 `; E. c' M( A5 i' z1 P7 z
6 V# \; p* K* A- include_once "./qrcode/phpqrcode.php";/**
; Z1 S8 ?& y. N) e3 Q& v# g- w. A - + r4 w- j( o. [0 M% `
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径0 ]+ f- j9 E7 _- R; i
3 W: q8 T8 M( j- * 在浏览器上直接生成一个二维码(内容为abc)' T) Z% @! s0 {
- 4 _0 O3 i. G0 \" O4 u1 @
- */QRcode::png("abc");
* E' a v4 C; z
- z% T! D \# S, ~- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**; x1 T* g. q6 o! w
: j0 o5 ]% }- v8 [- * 生成文件到本地
+ T7 p* H+ P2 S) |, D
) I+ G+ `+ Y a: u1 ~. z1 Y- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)
/ S- s: y9 n7 e% I
( H9 _1 F; T3 R- C+ P& u) d- * PS:$saveandprint源码的p6参数做了修改
4 C5 X# Y6 w8 l& B% u I/ g$ k - , P8 K( o# D5 L0 r3 g
- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);/ a N9 s! o8 }! i# k7 l
; D3 s5 A+ B. B7 E5 K- / P/ v& K5 r; B( ^) o" X
复制代码
" v: A) E$ p1 S; q( B3 v2、qrcode_logo.php
6 U' G" e9 a' @. c! G) X+ N: K( Fps:生成带Logo的二维码
+ N0 F( H) [' P( O9 O i9 A- /**
; _% W# |+ g j) I0 e' J* n: j5 V - . u3 K: V4 ]& n% w4 `7 w
- * Created by PhpStorm. a6 v8 z$ P) L$ F. X2 {: \
- $ t' n2 ]- O o- g5 _
- * User: user
! e' q. l- _) }' s" T/ [5 v
3 w; d+ ~9 m* Q9 U, g) ^- * Date: 2018/8/16
( b! W/ |. V& T6 a - 4 f1 m+ v5 c0 ?1 {
- * Time: 10:43+ o# ^" [( I1 B; \
- 3 X+ r2 @9 f5 f% T) T6 J! s: b: z
- */include "./qrcode/phpqrcode.php";$txt = "测试内容";
$ e# p! V5 _8 ~ E3 i8 \2 X( E. \) ~
( M O7 K0 a; l1 X; p- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称& W6 G, C7 O, ?$ ]5 G4 d' X D4 t
- ) A4 `1 a9 ?' c4 s4 d; G9 Y
- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是+ ^* ~' K! q6 @/ i' {1 E
- 0 u$ z! F, N; E
- $margin = 2;//边距
; o* p$ _# k0 o, F2 J
% L, [+ F9 F2 k4 }4 }- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片
: w5 ]8 F; V. M, X- J
2 G$ J5 ^4 @/ z1 ?+ g- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){
' }: a" h O7 V; B1 }* @2 Y - 7 k6 H7 C* t5 j$ r- Q. K0 j
- $QR = $picPathAndName; //已经生成的原始二维码图
. ` _) w. S) @" K: t; l - : Q P; _1 @" ?$ c1 t. X, r
- $Logo = './pic/logo.png';
% w" R9 a, `' `' g' i - : \# _ q5 _1 i! m; }+ Y
- $Logo_re = './pic/test_logo.png'; * z5 g+ w- M) }* {- p7 |& q1 y
( @' _$ K4 N$ U- R) ^7 f/ K; {: H- $QR = imagecreatefromstring(file_get_contents($QR)); / ~# C3 x* Z# X
- 2 n1 \! w( C; S- e
- $Logo = imagecreatefromstring(file_get_contents($Logo));
7 I- ^- E2 e( h* y. i0 x
/ d9 w3 B1 W" a8 W! j3 ]- $QR_width = imagesx($QR); //二维码图片宽度: W! b$ ~' k& r' ?( {
9 i# f0 o& U* d* n. N$ G- $QR_height = imagesy($QR); //二维码图片高度/ q! a. [- K7 S! b$ I. q4 _
- # b' {8 N* @2 B8 e% @+ b; d8 ]& D" Z
- $logo_width = imagesx($Logo); //logo图片宽度
S8 S$ @ j- V
9 W4 n# Q# k- L/ D5 m- $logo_height = imagesy($Logo); //logo图片高度5 m e! ^! {/ |6 p0 L
- " I( B1 G+ ]4 F
- $logo_qr_width = $QR_width / 5;
y9 l7 A4 h4 ?% j5 d: s p - ) }/ m. N0 V% Y! R) b# S; j
- $scale = $logo_width / $logo_qr_width; ( v; O" Z6 E$ @/ \$ @
- # U# V2 p* g) B0 {7 g/ U
- $logo_qr_height = $logo_height / $scale;
* @& M- M$ S, ~4 v5 H+ t6 T - ; N" J/ G3 G$ ?! z' M
- $from_width = ($QR_width - $logo_qr_width) / 2;
& O; x [1 M! Q1 w6 { - ) z/ F) u8 p- P
- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
+ A1 O0 O3 R+ Q& r; U$ A9 k
; z4 j/ K4 Q+ r' t6 f- J( E- A- //输出图片
4 P$ \, r) R j7 Z
( p+ |; \0 f+ M' {: j8 m6 S3 l/ O E- imagepng($QR, $Logo_re);8 @ b; T0 i6 [( B% J
- % H3 u1 O- S: l$ @4 j, N
- }
v8 E9 z; v1 Y( v l0 w* o - : A6 x; ^2 F5 ]+ f- ^, V5 f
( `9 u! m, T, q0 Z* N
复制代码 3、qrcode_vcard.php (生成电子签名)
r6 W3 I8 a0 _0 S+ R5 U8 F7 N+ b; X% w2 Z/ Y9 I3 w/ z+ b
vCard格式:https://zh.wikipedia.org/wiki/VCard, z( p q+ h1 {+ B9 _- r0 ^2 t1 i
3 e% a5 x( A- @/ M3 p: t
- # l: T) V- j' P7 s( ]" A/ `, T6 ?
- * Created by PhpStorm.; j6 P* L( \6 V- M0 i! M3 d/ d& }
# s$ O) R2 |$ Q+ m* F- * User: user
& ~! N3 e, d Q. i- S2 B* K - 7 Y2 G$ G- f! r& j
- * Date: 2018/8/15
* J" n* A8 v7 j2 o5 s. p - ! \: V/ f( t( ~" D4 ?& e# S
- * Time: 23:008 O: |5 @# G4 {8 Q# m
( a+ o3 A& W0 N1 @% T9 n2 U9 b- */require_once "./qrcode/phpqrcode.php";/**
& R% s. t/ K3 l- Z
. K- ?# U2 z0 g& L% R7 n8 g [3 ^- * 生成电子签名- ^4 q* u0 f8 \+ _9 G% J6 Y) ~% Q
- " |/ Q6 z9 b8 ]* N
- * PS;使用微信扫描二维码
* @6 ~! V' G; q. Z5 d) }
0 P0 t0 r9 ?) @" w7 w- */$content = 'BEGIN:VCARD' . "\n";//起始标志
/ b, ]. m2 {7 N% f - ; p) D& G; t( }+ ^* }
- $content .= 'VERSION:2.1' . "\n";//当前版本 k, Z' O s- F {
- 5 m% p# q8 ^5 x$ ?; Q7 R' {
- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名
7 T9 p" M, h% C$ V5 x6 N - ' U d- t$ O" A
- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称0 ^7 Q) @8 \ [) ~4 T
$ H& y, W* f+ P2 Q/ j) j- $content .= 'TITLE:PHP研发程序员' . "\n";//职位4 k% ^4 ^& Z6 c$ d# k
4 `" }, B* G; G- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话
- R, t0 Q; W! |' Q
) `0 y9 C$ G4 P* W+ O# H% q- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址1 k. z, z! n* h+ z% I9 W* x! b# I2 u
+ l. I: L* A t3 K* r& \7 H# _- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)
! P9 C- Y+ C3 r - 7 U/ T6 |% j9 P- c# \; V' O8 k5 B
- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话
: `2 Z9 O( J9 B8 U* \ - ' V4 u% x5 f& i$ j) S) j! Z
- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱
4 |* I4 B9 l) w+ H! p" l3 Y
( D, F# V9 N7 T9 _- i6 ^- u# B- $content .= 'URL:www.baidu.com' . "\n";//个人主页" @0 C. P( X3 ?6 Y, w v) t7 g
5 J7 X' H! j: z6 k" h0 M" a2 ^) E- $content .= 'END:VCARD' . "\n";//结束标志
, I" m7 H5 \2 ?$ S! ]4 p" l# F. U - & X3 w0 @/ I. _
- QRcode::png($content);
+ W9 ]. c! X! t1 D3 o. a. U
6 v# F7 s& U$ Y7 Q$ c- E% }
. S6 l5 C% S7 Q3 B: k. _
复制代码 4 o* m1 ` Q5 ^% b0 ^$ ?! C
相关文章推荐:+ O. ]/ i# h, a7 S3 L4 N% g
1.PHP生成微信二维码实例
q S6 k3 @2 |% A4 I2.php网址转换生成二维码, y, N! E, q G4 }, C: x
相关视频推荐:
7 V: ]2 b8 c+ K9 U3 m$ b) |1.独孤九贱(4)_PHP视频教程4 h5 K' Y" G- n- c; b
二、JQUERY生成QR CODE
. _/ [* f* T/ _0 }源码地址:https://github.com/jeromeetienne/jquery-qrcode3 r" B q& t* r9 V
( l" p6 y) X9 ]" h
jquery_create.php, }5 H; m" _) W' P' F: U/ W
2 G/ }: k0 o( r! R6 J3 h6 }( O1 r
- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码
6 o7 h. _1 ?7 u# w) H. q三、PHP识别二维码- e" G" T3 c6 \+ p/ G( B
1、方法一
6 r& e3 @/ e( y. m1 p) A; ?) x环境需求,安装如下扩展- ~6 S* @ }; j7 p
- ImageMagick; g( G' X1 m3 S# |
- zbar/ n6 j3 X9 X! w! X; q
- php-zbarcode/ C( I, e5 \# {& N7 _
+ N! {0 G8 l4 N% g6 e1 q9 ]$ q
2、方法二: f- r; c3 H8 k0 p
PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以) [- T( G' v3 c4 a+ `" Y
qrReader类:https://github.com/baagee/php_QrReader% d( w! K/ W4 N/ }
" Y& T4 O6 k: j( z
- 5 m7 B* E8 o) \% Y# `4 E" b! B5 E, B
- $qrcode = new QrReader('./test_logo.png'); //图片路径
: P2 p T, c% |2 J0 K: }7 @ O - F M' `3 G) N
- $text = $qrcode->text(); //返回识别后的文本9 ?5 O# o# G$ a) r( I% o
- 2 ]! l, ?7 y- z2 U- y4 s8 v4 @
- echo $text;
% {1 e' B7 C4 e+ @0 g/ _ - / M" m. P F) C* _6 r
; |/ \. Y5 j& o' \3 K
复制代码 ' o) P! g: ~9 B- W: d: Z' D1 O
链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7* b' r2 s0 U) T. C3 G0 s+ H+ H9 d
& h7 g- ]' ^1 L' n) D8 o4 y
. t6 M, Y1 ~. `/ w" \. {0 a6 w8 P: p: \4 d4 {+ U3 F
4 ]" D% ~, U& U/ O; F. x5 j1 u( Q
* C* J3 T* C0 S
1 z* e! e0 c: q8 J5 S1 d+ I) j' P) t2 z8 I
% t1 p8 H) s v a8 [7 I) d4 q( p. `, z% W! L
|
|