本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。: M) H, ]! q; T& I+ l) s |
---------------------------------------------------------------------------------------------------
! j7 W' j! P% T7 q0 g7 S" q9 K二维码的分类1 U7 q: H2 ` Z6 m y6 w
线性堆叠式二维码
S: H; U. C/ M* ?+ M
2 }1 L7 b! v2 r矩阵式二维码
# H3 t2 }7 \8 C# ~
9 d h8 k5 \* ^0 a0 |% M二维码的优缺点
$ J8 ]4 v* T3 f; N; P Y6 {* `5 j+ Q优点
+ Z& F. A: w* B% d Q信息容量大
; ?( U% c, c1 v1 b7 U7 x" e$ C4 w8 I' f4 u2 n( s# h g
编码范围广) Z( e- P& w! w) _7 ^. H
) r; Z: g1 {; A# c8 M容错能力强% y1 y8 ^0 Y' M Z2 `. k# `5 k
, t$ @$ e" W# }$ A
译码可靠性高! e! x# T8 x, ~& m9 S. b- X$ O5 U
$ w9 `9 f- j4 t1 D7 G/ i
可引入加密措施
! c4 H. e5 Q+ @( \7 b
) I" p5 |7 Y9 m5 T( N& o/ K成本低,易制作. F! G' g: n6 L( ~2 }; [3 O# E
% K# Q( h2 [3 u3 H/ n
缺点
( F: c/ m6 n' e8 G二维码技术成为手机病毒、钓鱼网站传播的新渠道
) ?/ a/ B, B) B$ f' @/ `$ l g& t
信息泄密* v4 U, V! f0 B i. m2 J/ a& I
# j: X' D! X5 _, ?$ N0 q+ @目前流行的三大国际标准$ i* b% G) ~8 p& g+ Q
PDF417:不支持中文
2 H! C) ~! T$ P: p& {+ o6 n4 _
DM:专利未公开,需支付专利费用
2 T8 y$ J" R8 ?9 |/ z- @% h; Y) @' a# V9 A
QR CODE:专利公开,支持中文 I! y1 H9 s5 K) ?8 A V
0 k! E6 o* `9 ]' M: r' ~$ P& d
QR CODE 纠错能力
( u0 p2 M, e$ h$ AL级:约可纠错7%的数据码字 z# R6 u E V0 Y# S" \$ ^
! [+ \* N K, o( ~1 A' u% R- R
M级:约可纠错15%的数据码字
8 G% D, F& Q: T" C% o6 N3 g5 i) J/ d G5 J+ c. V
Q级:约可纠错25%的数据码字
/ P% M% X# m3 z! E) Z2 p4 w0 U2 p3 k* v# E
H级:约可纠错30%的数据码字
3 M* U/ U. n$ G
* T0 f8 T) ^0 E3 r3 ]前提条件9 x9 L- b2 \- v
GD库, a$ \- ?( w% A7 ]4 I8 J( M
! }/ R- P6 p4 [4 T1 ^* N; t一、PHP生成QR CODE" {3 `9 r* S/ \6 N' Y r
官网:http://phpqrcode.sourceforge.net/2 U: _1 V2 K) t7 }6 d
. _! y: }/ P: U) s0 x2 f/ O/ B
下载源码:https://github.com/endroid/qr-code+ G3 _9 S- m u$ R" t: z4 e3 n
- T- e: x/ ?. y D" U7 p. k目录结构
9 N/ j! a3 v. f4 z0 Z' K
8 m( `- \1 A4 O. n- ` x" c9 I% F+ n
1、qrcode_create.php
6 O! d$ S$ P% U ?4 gps:生成普通二维码
9 p9 \7 e* I3 H, V5 p9 N- $ ]9 R$ W2 m1 {3 f9 s" P) y
- include_once "./qrcode/phpqrcode.php";/**
& X! U4 S, ?" F. r( D D, N
: f3 g: N- b- g( |8 ?$ Y* d- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径
, T$ I+ M7 t# X/ y - ) {/ q \! i* C3 i+ b8 k* t$ X
- * 在浏览器上直接生成一个二维码(内容为abc)
2 q0 w3 Q/ |) g6 q4 L - Y6 i6 A* V) O" c% \# F" o
- */QRcode::png("abc");
1 O9 q v% X4 q! U, c - : P( g* j3 l3 o# p
- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**) g. E; Q* g0 n6 F0 f7 j
- 3 `4 X& [ H0 i1 L8 G" b$ P! k' q
- * 生成文件到本地/ J1 c G( y/ b+ J6 N+ W
+ c9 x8 P" C7 W9 l o- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)
{4 @, i" m- y7 ]0 X
5 U+ z( o& V* |1 M6 O- * PS:$saveandprint源码的p6参数做了修改
H/ U x( l6 w: j) ^1 V% t - 1 {- y6 S6 ~* k) P" H6 d9 A
- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);% y' f# X3 d+ t3 d: N
8 _8 }1 w2 S6 h- D
7 _; }. l4 G4 a, U- N6 p' K6 A) P
复制代码
; y! A: [: l. J4 h2、qrcode_logo.php! a* s6 k0 C7 y: R
ps:生成带Logo的二维码- 2 W! S' h1 e& _/ f
- /**
k. h% s: l8 w9 Y3 _* o - 3 {' g3 e! g+ |$ q& Z
- * Created by PhpStorm.: z5 {- p1 s. C" d
7 @1 I2 S8 e. f* Z% }. G4 h- * User: user& L& s2 k: a( u" o9 K
/ r1 W* v: e! A% _. }0 d/ s8 t( c" h- * Date: 2018/8/16
- A4 h, t, h& ^6 r. o
- Y7 c- i" s0 p+ C: d& N6 [5 K4 [- * Time: 10:43
- r4 z! g- E0 H
" G9 @; {8 z- m* m- Q* l- */include "./qrcode/phpqrcode.php";$txt = "测试内容";4 |3 W, `$ ~) z0 i% b4 d
- ; h4 |" g0 {( U8 g# V g
- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称3 W" E2 ?8 E8 P6 D4 P
- & }$ Y" P/ A5 X6 A' S
- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是# V- S# p; Z; K2 n6 D
- - B; g6 ]! \- @8 Y2 z7 X
- $margin = 2;//边距: p, i% k6 X4 f* J
: q2 t' q$ ]; W/ K, s- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片
. L. D, X$ f% B! j' ?9 j& v
3 ~' u8 a2 E7 x. ?6 M; @. a- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){
) J' t7 ]3 m" ]' V
& g& O' p% l/ W8 I* y% @- $QR = $picPathAndName; //已经生成的原始二维码图# L/ g9 j) D1 d$ R7 A% S: f
! P [6 M/ g- W' }1 ?' @# i+ A- $Logo = './pic/logo.png';
, D* {" s5 b: G" B! W k1 t
2 J [% r! W2 @( A, M- $Logo_re = './pic/test_logo.png'; 5 _# O4 [- ?! E) W! S
- 5 X ^2 x. L, T% h
- $QR = imagecreatefromstring(file_get_contents($QR));
. ~# `% D# F: `% l. a4 M9 m3 p! @ - 5 h7 p& @1 a/ n0 ]# Y* P
- $Logo = imagecreatefromstring(file_get_contents($Logo)); ) ~0 W4 J) l0 F; \& Y7 _0 [, e+ ~
* ~8 x' [6 ~0 _" k6 ~" S" `6 C% r- $QR_width = imagesx($QR); //二维码图片宽度
$ j+ K. F o" l+ y. W s( [3 b
4 C3 v l/ Q( G& h$ t8 n. \, T- $QR_height = imagesy($QR); //二维码图片高度" J5 @' ]* `8 X; G _1 A( V; e2 C
% K( J% w X$ F- $logo_width = imagesx($Logo); //logo图片宽度% W+ E9 I1 |' o b6 y
) f: i# p2 G) s$ v- }- $logo_height = imagesy($Logo); //logo图片高度
& t+ M- M: b# i- H4 K - ( N5 D) ^8 G4 G e
- $logo_qr_width = $QR_width / 5; 2 Y6 R9 f: |4 H! d" u; x! f
- : J8 c% e& P. v
- $scale = $logo_width / $logo_qr_width; $ k2 V# o8 e4 d
* S5 O# }! _! p6 E) F& U- B5 I- $logo_qr_height = $logo_height / $scale; 1 v3 J. B9 I. w! ^. X
- 8 T/ n/ n- p, E+ h- b. D
- $from_width = ($QR_width - $logo_qr_width) / 2;: v5 z/ y w0 d8 r, p$ O" ?
- + p4 }4 o7 X! N! v- O
- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
' ^* f( Z: S% \; R' z
" R7 l8 Z! }6 G' W+ d+ w- //输出图片
1 b( C( H0 i( Y0 A - 7 ]" G" q1 @5 u' n
- imagepng($QR, $Logo_re);- t1 A4 X) g2 M5 ^$ N% Z
- $ L7 a0 X0 \0 K7 f, z8 I) g1 }
- }
* t8 a# c1 @: _, y
% W4 _& K% ~3 i3 J S
# M0 z! i: S p* B
复制代码 3、qrcode_vcard.php (生成电子签名)
/ v: O2 e9 B, A/ U) w
. h! y$ y. e7 T+ @4 R' K$ cvCard格式:https://zh.wikipedia.org/wiki/VCard
, R! I# W; S) ]8 M! A( a/ s$ h& V
8 R [& `% m5 h1 y }! B- * Created by PhpStorm.5 |2 O2 T4 j+ F
, k) e1 ?- ]" \- * User: user7 T8 y: b9 b9 P, ^8 v3 |4 x( r
- + H: @" J& v, D0 m* G/ G
- * Date: 2018/8/15
' u+ @% z: g/ y) |5 l- h" u2 E - 3 L6 O! B* {; N7 Y9 q! ^& _
- * Time: 23:00/ R# N$ x8 N V \. D
- % B8 l% H$ v! d
- */require_once "./qrcode/phpqrcode.php";/**% t5 |$ |0 y1 v+ c# k" u
- _) t; B4 \3 r8 y$ H' j {
- * 生成电子签名
M6 {: B6 H# S! h7 d
@6 V; k. t' s, l6 z- * PS;使用微信扫描二维码* ~6 P) j! y# D/ G" m* Q
- 3 V' ~7 |+ P& z) J( h J
- */$content = 'BEGIN:VCARD' . "\n";//起始标志6 V# W/ v: C1 u; A: Q6 i( d& l
' R; P0 g3 O" ^0 }; Y9 f- $content .= 'VERSION:2.1' . "\n";//当前版本
* l, }( x# R7 _- ?8 w
2 f+ ]8 x" V" ]4 R: p4 `& V- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名
6 \! c5 \: z( J - 9 I( y0 n$ c" g7 K! ^% w# d
- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称
) F3 x$ G$ B) |" ~- t
& m+ G6 i. x+ J+ R: h2 q- $content .= 'TITLE:PHP研发程序员' . "\n";//职位, }( I/ k; g% _6 z
- ' a0 E! \& U; i4 F* |
- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话: C8 z8 }( b( u
7 }/ w1 m) U5 Q' Z5 V2 ~/ r3 i- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址! d2 m* j7 k" Q+ w0 c# D7 a
- # l( Q s0 p6 T; x$ @7 b
- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)
8 t" b/ a- }; r3 C' @' v# c n9 a7 O7 z - 6 r- P0 h4 n3 r
- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话2 `' Y& k7 _$ D8 q
- 3 H) S4 Y6 M: V1 X
- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱3 k4 E: q7 }) i' K, W
+ i; [* [8 t3 I/ G- $content .= 'URL:www.baidu.com' . "\n";//个人主页
~6 r- B8 P4 H5 } - , q4 d6 [% j) S+ S" ~
- $content .= 'END:VCARD' . "\n";//结束标志) p/ b8 P& s$ B
- g0 x4 C/ n1 Z3 d& z* g; I$ T- QRcode::png($content);& S2 X! O0 e, c) \! e/ A, f. v
- ) _" F* I3 O. G7 l' n. p& ^
' I s7 b. Z# Y v* H% O
复制代码
% F/ j5 T& i$ f: [* ?) s( C相关文章推荐:; y" }6 I) J; _4 [) g& U: n4 y
1.PHP生成微信二维码实例) _3 ^3 o9 _7 A# Q* K
2.php网址转换生成二维码9 W; ]& k5 L+ R! N' \
相关视频推荐:7 e: i9 u( c4 _ x) S4 V' }8 Z
1.独孤九贱(4)_PHP视频教程- h2 T8 S P. l% W. P# }) @' J- D* Z" R
二、JQUERY生成QR CODE4 |' ~1 a Y2 g4 \. z% h. j* T+ V2 [
源码地址:https://github.com/jeromeetienne/jquery-qrcode
/ J; ` |* d! L+ {( q1 j" O; r! I5 E: J+ x, E4 G* V; a! ?
jquery_create.php$ o4 C7 Z. t8 b
7 u' t, z% y( C1 k
- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码 & U7 h3 Y$ @) L% P4 ^& x
三、PHP识别二维码" R. J2 J1 E0 [2 [
1、方法一
- K( \. j# _& r V. q环境需求,安装如下扩展0 ^1 X) N. T9 ^9 @
- ImageMagick
& r& _1 {, L! e- z8 H) z( ?' _- zbar
0 v* e3 h. G. ?9 X; z- php-zbarcode
+ U {' o" e; v% R4 y( Q' V8 @; [# ?
$ ~; F) ~+ }1 T' R. W2、方法二
/ P, E9 u* }% gPHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以
+ e( m% |8 m( [+ [9 e2 o) hqrReader类:https://github.com/baagee/php_QrReader
2 m& S' z1 F+ v. K0 z( t L
# _2 Z4 F/ h+ N1 Q2 {( Y: a- v+ Z$ x S4 a# u6 e
- $qrcode = new QrReader('./test_logo.png'); //图片路径/ r3 f# |$ u9 H$ l
- 2 E, w3 ~2 H: `
- $text = $qrcode->text(); //返回识别后的文本
; _, P9 M8 B8 O# G1 y - $ h& u1 V; R% Z" \: q1 L: ~
- echo $text;$ H- U) r4 _8 Y
* M% h3 ]' M' i" _- _4 y- $ C a1 o) m( b: Y) ~/ V
复制代码 2 q* k, Q( z2 g2 m! X9 ?6 y j) V5 L
链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7" ?/ r9 J( ]( u* E) _
- y, B8 B- K# \, I$ b
. k% n) s5 r; g3 w, A% J
2 L6 t% J9 I3 W8 a' d, Z
, B1 p9 a# T4 [3 z' h% E3 Z
/ m Y3 F! v P9 v H# C" k4 {! n% T: m6 w" y5 v
# ~, j. ?" }! k: J* G6 ^7 O1 C' P# L- ]& B- v8 c
- ^, U& U( d! B! M' P1 H7 M, r
|