管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。- _) B* `% Y9 `, `4 S
---------------------------------------------------------------------------------------------------6 E N% N4 X, z) X# r9 ~
二维码的分类4 I! P$ r( u" [, }
线性堆叠式二维码" N% H/ O/ r8 b/ M' A f* O
) Z) v* G7 g' T2 q
矩阵式二维码
% |6 |$ t$ K. Z# R& i5 u# _
/ T+ K- ^# d) D二维码的优缺点
' i" U. Q$ R4 p* y2 h" f优点- d. @* @, c& T y2 a
信息容量大) V# L! @2 M# n3 Q( x3 ^& ^. B
1 H% j' B9 T0 k, k' X! U6 m
编码范围广
( a. O5 Q% Z z* V& D. P3 ^% W4 q" g7 c, N3 e5 ~
容错能力强
! G! t) a) @- Z& I: q1 K4 q1 b w0 u a* U; l$ N& T
译码可靠性高( }8 L$ t- |6 s' d/ F1 q% B, j. C
`7 e0 [, S4 m# j2 _& }2 r
可引入加密措施 G3 W: O5 v: e9 A9 ~3 y P
/ r: d; }3 U. C9 f ~9 j, Z6 U$ }8 l
成本低,易制作
2 T9 G' M1 e/ q* v3 l5 z s0 `
8 v! D/ g7 d6 E; E9 s缺点
. V: x7 |) h' |- F8 E二维码技术成为手机病毒、钓鱼网站传播的新渠道" Y, D( K* H# B. ^
& O0 L9 O3 Y2 c! w# v2 d+ A信息泄密( F1 r2 l/ P( n. Y H* |' {
8 a& ?) a2 z6 K! L! c; H3 ]/ r+ H目前流行的三大国际标准
. B4 @8 H5 E3 q' o: KPDF417:不支持中文6 R, L2 J+ b: [
& D. C/ `% a1 u2 K% dDM:专利未公开,需支付专利费用
0 a. Y2 ~+ s$ g- k: n" F: W* T3 d7 q, M* V( X$ p
QR CODE:专利公开,支持中文% t# Y1 [4 G8 M9 w; p
5 g5 `. W! h4 vQR CODE 纠错能力& A( O6 ~. n5 U+ t3 p+ V0 ]
L级:约可纠错7%的数据码字
3 E( Y+ v% o9 _4 c% z
8 q4 n9 R: Y1 y$ c( q( T( O0 iM级:约可纠错15%的数据码字
! j' w+ P" F! n D; o; ]( s& f2 N! [- s
Q级:约可纠错25%的数据码字
6 h \& [- {: `. C7 r! j- o0 V3 m
4 P# c/ t0 U5 tH级:约可纠错30%的数据码字( ~+ e8 P; `% }5 s7 L z
/ x+ \7 C/ \, ?前提条件5 v. Y/ A( }+ Z4 ~! A0 P
GD库
7 n" C: U! E5 |- ]2 g4 l1 e" D! X q ~; W/ K! V
一、PHP生成QR CODE
4 ~0 M& S2 a# x# J7 v7 x) ~: ]官网:http://phpqrcode.sourceforge.net/2 V! e" V; l; f" w' N7 A2 z% t
9 |3 t, C2 U2 V( }6 S" A" K" J E
下载源码:https://github.com/endroid/qr-code W5 W" Q6 Q5 T: [- E0 N+ d
8 y1 N4 r ]2 F5 G) r目录结构
' @; c* V1 t4 U+ ^& A: I$ b
5 ?% c3 y% T/ q# f# m
* v! [4 l7 R9 _" E" ~1、qrcode_create.php+ E( d: l9 j( g/ F4 W# M. Y
ps:生成普通二维码
" P3 `9 p: E) T1 }& ~' E. D- . K4 L) e* }- m. U+ C4 D6 j/ b
- include_once "./qrcode/phpqrcode.php";/**
& i- R# o4 G5 Y: g
% b) ~/ U# c ?" I# k- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径
; _+ u; o2 a9 l$ }7 e0 q: Q( s
4 _( |0 E/ M( w/ Z! f$ z- * 在浏览器上直接生成一个二维码(内容为abc)
% v# K' M p( E. e8 V
7 j* R! i$ W* z0 ]: x `- */QRcode::png("abc");
' E- F$ ]8 k4 [7 ~( R
1 }8 |* n6 U8 O: x1 e0 R- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**
7 v' \/ b( R* ?! o& P* ]5 o - 7 d; t9 p5 i- ?# V# V! H" @+ A
- * 生成文件到本地
7 B+ Z, E4 j- x' R( x- M8 A$ Z
) w9 y/ E9 m. m# Y6 I, T- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)( M- L. N7 r2 S0 L
- $ U9 i7 L- U( }3 o) G/ L8 ], E! C
- * PS:$saveandprint源码的p6参数做了修改/ ^( I/ W @8 ]% E0 v
- ! t i$ P& }8 f* Y0 q
- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);
~' D0 I/ X# d7 {5 y
1 L. P5 t. y9 }$ W8 K: Z' ?' e
1 x- N1 F& C l+ t& @9 Q2 q
复制代码 " v; e/ m/ t$ A5 X3 a
2、qrcode_logo.php' z* ]3 ~% G5 V9 k6 N
ps:生成带Logo的二维码
: h }( O- \" W. M% s- /**
- a- @* t9 m" g - & b4 v6 \: y/ L7 L! c
- * Created by PhpStorm.( R- l8 c; r; \( V5 R
- 6 Z; u- J5 l. t" v/ G. [( v1 M
- * User: user
) Y4 S& m( E/ L: z - 8 n/ J+ x$ H7 X6 G
- * Date: 2018/8/16
& f2 B+ w0 \3 n/ x( ]+ v; K4 W
6 k: J( O0 n. p* ~" F- * Time: 10:43
2 K, ~9 P& A d6 i! y' k - 0 C3 i8 ^/ H. H; Q% U- X `6 i6 T H
- */include "./qrcode/phpqrcode.php";$txt = "测试内容";+ `4 f, Q. `- k4 w: q8 j" j
- " v; Q8 c0 H5 U
- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称3 d. k6 i# W& }! y# R4 x% w6 S
8 |! p% M3 W8 A0 A% i6 O3 n0 j/ M9 ?- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是
E) M4 a3 i) o' b+ a7 |8 J3 L
: Y' z5 j f; T- $margin = 2;//边距5 z; f% k' q; X9 c) q/ _$ D
- 5 ^4 E6 X4 O, C: h
- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片
2 j/ J& R) t5 R! }" D/ a U
, S7 p* F- l5 M4 Y- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){
+ r3 \; h- q+ X9 a! K3 g8 D
' \2 I; p1 h7 q1 n9 h- $QR = $picPathAndName; //已经生成的原始二维码图, X) c6 G' O: \& W& g# i
* i0 G6 I# [! m# K: x8 M/ h- $Logo = './pic/logo.png'; " g3 |! T, Y' e. P O1 b
- 9 h. l0 U ^& _( }" Z- S
- $Logo_re = './pic/test_logo.png'; # K; p$ U7 b* T0 r1 G4 [* k
9 U6 ^+ F1 c5 A% W- $QR = imagecreatefromstring(file_get_contents($QR));
& [) ^) ?: \3 e# `4 y- ?) U
' F% B0 M; P5 D, n b& g) t# Z- $Logo = imagecreatefromstring(file_get_contents($Logo));
% `! i" ^+ o0 s - ! A! U( L0 K- K% F
- $QR_width = imagesx($QR); //二维码图片宽度/ U, y6 t0 O" H# u+ z8 X" T T! P
Z0 i4 p5 x8 j- $QR_height = imagesy($QR); //二维码图片高度/ k' B: k3 M: Z$ S
- 8 u- j/ O! g: W; j
- $logo_width = imagesx($Logo); //logo图片宽度0 B& h0 B, |# K; D. N" w' s' i2 n
- " M j- f- n7 Y$ |8 \& H! x z7 |: Z& a
- $logo_height = imagesy($Logo); //logo图片高度
4 j5 P) f7 b2 x( R
9 m* \8 b/ y6 N6 Q8 ?5 m- $logo_qr_width = $QR_width / 5;
- q- k! F9 y, u6 n. S0 F
' X% L8 m4 f" ]* S% ]- $scale = $logo_width / $logo_qr_width;
6 f# m4 w6 O6 ?$ Q$ h* n9 k* x - & b/ ~! o7 f, n& T, V
- $logo_qr_height = $logo_height / $scale;
6 U7 g/ r/ D" n! O" u) k: S4 x - + c+ o% d; i6 E
- $from_width = ($QR_width - $logo_qr_width) / 2;
}9 }8 _6 i) ^9 F" Q
1 M: V* r/ u8 T0 I! m1 X- t- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
+ i* ~$ c, k0 v% Z# c4 v# n: _
3 G4 @! {! V1 v0 J7 J* S8 a! K, K9 N- //输出图片
. K5 V# c- j, U+ c) r% d7 P* j - " w, ~' h' N6 ~1 V
- imagepng($QR, $Logo_re);$ l0 Z% l+ L; M0 }, ]. Y" K3 D. Q8 _
- $ F$ f3 f5 q3 O
- }# D0 ]2 S7 m+ z$ ^; Z6 }7 f* p, S$ D
2 I9 N1 }1 M" w! ?0 t% t: ?- % ~/ r% Z- B& g# I2 {* W
复制代码 3、qrcode_vcard.php (生成电子签名)3 V6 y( x0 f( V2 Z3 i3 b
( M0 f, C$ n9 y, N7 L; v: {# l# rvCard格式:https://zh.wikipedia.org/wiki/VCard9 ^' C' W( [$ C; D c3 A* c
9 j8 E6 [( y5 C3 l& Q, e. L
$ k* P! ~* ^6 {- d' l' G) y- * Created by PhpStorm., j8 [% k; J7 `& S% k
- , f& \7 T+ _6 l# o
- * User: user
# d. g2 F, l- v; V* |$ T, A l3 A
! x- W1 p4 E2 |0 p8 O) W- C- * Date: 2018/8/15' @" r8 z* c) ?8 `" x
M) \7 w( b4 D- [# p- * Time: 23:00
: E) \% d7 x% F8 j5 ~0 {+ v4 c - , A3 B& ~0 Q( K1 b. i
- */require_once "./qrcode/phpqrcode.php";/**
3 H. X8 j: U( a3 ^3 q - ' j/ z4 {$ f6 \% H! |! s: a* u
- * 生成电子签名
/ X7 J/ Y* t6 Y7 [8 Q+ u' p$ ?
9 A @4 ^- \) B; V' J- * PS;使用微信扫描二维码2 S5 |3 q, [7 ^: G
9 h# T) b6 X* [/ t8 i& o+ x- */$content = 'BEGIN:VCARD' . "\n";//起始标志
W7 o; S9 _" L) G: J( S
6 |2 r% f& g, o# t) r3 f- $content .= 'VERSION:2.1' . "\n";//当前版本
! I5 |- C* t9 `* T& L; n - - R& i$ ]1 H! l1 `8 s1 m6 ?
- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名
1 |+ b P, o$ A8 y, a$ d
/ {) p9 U* P# A5 N- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称
1 l: f; o; V. W4 I* J - 0 C" p7 O8 Z! G; G3 M
- $content .= 'TITLE:PHP研发程序员' . "\n";//职位
% b( F1 o6 C3 V! x( x# C - . `* K5 t4 `; A! \( J3 X( f7 y
- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话9 L3 ?9 \) a& J0 \' t
- ( ~- a. ^; _7 t2 H
- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址0 y2 Y# I% w6 D5 w k o, E h
. t1 M8 K8 {% c" x6 l" J5 w- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)
' I# Q0 F6 h/ B. ~ - ( F" Z. S: _8 \. L3 a$ t
- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话' M7 M& S# u* D6 v
- 4 y3 o1 t4 n0 n. ~/ @# d& h1 z# ^* \
- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱
+ E. ^' r0 g& H' _0 U# |
) S0 M3 y( ?3 ]& h5 D- $content .= 'URL:www.baidu.com' . "\n";//个人主页8 u# n# z+ K0 z# ^" K" ~" a
- 3 m7 ^$ w3 i0 C" A" G, |; q6 b
- $content .= 'END:VCARD' . "\n";//结束标志
( G, d0 Y( _' s: J
. K6 \. N; ?$ H5 V+ X1 P- o- QRcode::png($content);
( w; `) \ K% W6 _2 a - % C0 V/ a* @0 H# i/ f% ^$ N$ Q
- . J, H: T# u7 y# d$ m3 m- L& T
复制代码
( B# [9 B1 a0 g6 \相关文章推荐:
+ B# Y$ ?; z( h7 I) o- }1.PHP生成微信二维码实例
3 S. @4 I6 U5 J" M& ]" P# q2.php网址转换生成二维码
& v1 |% a) r' x; `相关视频推荐:
7 n# S, m7 i# Q9 D3 L! q( U. ?) ?1.独孤九贱(4)_PHP视频教程# B- L# g. [+ q6 \( T/ \
二、JQUERY生成QR CODE* K3 ?1 S# X1 n2 x
源码地址:https://github.com/jeromeetienne/jquery-qrcode
]8 v; c% g6 b9 h. i7 R. g6 u* W j5 J( N/ Y9 `
jquery_create.php& @6 ~; W0 m( p
) @+ t) t) B3 i7 g- [2 S; j
- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码
: ~1 ^7 _0 O7 T g. k9 B8 R三、PHP识别二维码
r" }2 X, G7 a. e1、方法一1 f# a. o) W I, T f X
环境需求,安装如下扩展4 ^$ R2 O+ C9 g
- ImageMagick4 w$ h- _6 {" f& v- G! {
- zbar
2 g$ Z0 ?7 T$ H. M0 a' }. W- php-zbarcode( }/ w- q9 X* R0 t7 }* K( o
* N9 r/ P( b6 l
2、方法二& W; r% W) c) K$ L# E4 [
PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以
, |2 H- l2 c' p' I7 fqrReader类:https://github.com/baagee/php_QrReader
. b5 ^1 i3 K# r) N; \/ B3 S% s+ q* j8 F
" ` \' P9 [; b- $qrcode = new QrReader('./test_logo.png'); //图片路径9 x+ e/ x4 I o# p2 N, }- n
- % Q* q5 v- w7 N d7 g9 D" H2 s
- $text = $qrcode->text(); //返回识别后的文本
" c9 k. M9 ?$ B0 } - , U: |" Y5 N& B( [2 P4 P Q* L9 \2 k
- echo $text;* ~1 s+ M! H& h/ |2 @
- 9 a& ~: o8 A$ P; T7 G Y
4 n% D8 ]/ T/ ]3 g; [
复制代码
( F6 l1 I% v& P链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y75 Z3 V" g& ]* x
2 q* ?; k, g1 g$ k* b: K/ h% ~4 }- s1 N. c9 l) V
' w9 b# z9 p! ]: ~7 b
) K: y R/ p2 k( w0 c
- O; `8 i# H7 ]2 f
2 @, f2 E4 {. N: S" j9 I, i+ A. @* I' C8 n
7 V" q! m" x% J
3 T& b8 c) m" @ k8 y' B2 G8 v
|
|