管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。' X' G, L: T" ?# n
---------------------------------------------------------------------------------------------------
3 k! R9 v+ |# `7 x- y6 h二维码的分类
% k2 G0 \' h! q( |# S* b! n: Z线性堆叠式二维码
9 V% x% N2 t" M$ S9 W R5 v$ y( P0 x: z u$ B1 s
矩阵式二维码1 q: f! A3 K& r( C! ~
* Y( E- G; D! M6 b5 l& T二维码的优缺点
& m3 _1 V& _$ o' A# Y& k1 d: G& D优点9 T9 I- |5 z& D
信息容量大6 x5 F% I2 i, ^: H$ N2 T5 r* a3 o5 I7 P
5 Y! t( t4 @' Z* c; K- l( K
编码范围广3 _& S* ]# {0 R- u+ y: M
* `. G, l3 i g( m& x
容错能力强
& R, W4 b" y3 f, {. W8 L- @* C+ @) }2 [9 m5 K9 I
译码可靠性高8 l1 a1 q9 K6 a( ~5 W
' s2 O H) u% V& {# V4 i可引入加密措施
& k4 Q4 Q F* e$ X3 p: I4 Q
, @/ ]& w8 C: h% f) p8 U成本低,易制作
2 q: ~6 a" H" h* t, Q
& C6 n4 I4 B( j. s* i& G缺点
/ g1 L: ~5 @7 {" B二维码技术成为手机病毒、钓鱼网站传播的新渠道! A6 K9 a1 `5 a! n
$ h7 i6 I i' j1 E! J+ B: i信息泄密
$ w+ `1 u" g5 Q2 `- a6 q+ |; n7 Q7 g% f/ W1 F
目前流行的三大国际标准
1 U* J' d" [9 l5 }' c, [PDF417:不支持中文
X/ f2 I w+ _! D, B/ s9 f! o. J/ D
DM:专利未公开,需支付专利费用
$ O+ _$ E7 t! Y8 n# n1 F! G8 D0 Q
2 v E- a' t% ^/ m: u/ Y& ?QR CODE:专利公开,支持中文/ z$ f7 O% x; K5 S; B
$ c' n7 C2 U. M9 h0 u4 F8 n
QR CODE 纠错能力$ [: | [2 L0 y' I0 Q# B; d& D
L级:约可纠错7%的数据码字9 r0 h" s$ o [" G0 ^$ _' J0 O
5 X% t1 q+ V' U. CM级:约可纠错15%的数据码字
6 z! h ]( z+ g
5 K$ X( h9 {) iQ级:约可纠错25%的数据码字4 L* J% o: C. u) h8 b! z, ~8 i
0 L; Z/ p" L% R s) R/ V3 l
H级:约可纠错30%的数据码字
/ ]" I$ s! {. E8 M( I0 f
' q6 i2 D1 D0 C前提条件1 k- q8 e% L5 Q1 ^& N, ]7 l4 T: K! m
GD库
* w; p! Y7 c2 D: Y- W' m2 {& G( I3 t* N" i
一、PHP生成QR CODE P7 } k4 O6 ` d
官网:http://phpqrcode.sourceforge.net/9 h$ Q1 {$ }4 ^, ?0 Q* O. O( d/ U5 Q
* ?6 @3 A; Z7 W; O$ c2 r
下载源码:https://github.com/endroid/qr-code& w& j8 B* V8 X0 W7 C' ]8 G9 {7 ?
' d- y$ o: ~2 x; N* S$ h) A" ^
目录结构5 D \ M- P/ m1 l, E; C; U
0 V. O# ?( f+ L- d0 D0 I/ ^5 M% E
3 [5 s3 E4 X) C3 J4 J _" z1、qrcode_create.php
P0 Q* ]7 K& I6 mps:生成普通二维码
, W! D8 ^) Y( f
) t% s6 p0 Q1 Y0 \, H$ Z- include_once "./qrcode/phpqrcode.php";/**
+ A$ N! _/ K; E: Y5 F5 Y - 7 c& V% {1 E% @5 ^/ ^
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径
( n2 c( M! @# l# G4 P - - f4 T5 O/ z* a: l c
- * 在浏览器上直接生成一个二维码(内容为abc)6 Q! }: |, z! ?3 Q4 s
# ^( d5 l; B) H. B D6 h- */QRcode::png("abc");! j. d) B- ~6 B' c
! f1 E* U$ B- F" I# `; {# a- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**
6 U- r7 [0 R2 w9 H T/ y% {. A" Q - 4 {+ K- r3 A j1 O: ?6 {
- * 生成文件到本地( \8 V$ q, F6 @0 N* {
" L+ ~9 }. C% ^! F- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)
O- E' T5 g4 M2 Q, ] - ! B+ C" Q( }: ?5 g# |" S+ t
- * PS:$saveandprint源码的p6参数做了修改8 o3 f, A2 @$ R% x2 X" i6 k+ |
1 W8 O0 E7 ]& h$ A$ E- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);. }$ p+ s/ o8 {/ H& Z+ l
- 4 V+ o/ j& h: N6 u: x
. P" i& P" L$ Y
复制代码 / ^! j( ?/ a5 q& X6 K
2、qrcode_logo.php
4 B* Y v" a6 J0 e' k4 Q2 gps:生成带Logo的二维码- % `9 R9 `$ m, p! q( a- o; d
- /**0 u/ X7 W8 @5 s: F& z! y
- ( X2 i7 l) H9 ]/ @
- * Created by PhpStorm.
0 y* n1 k( R5 K h+ F - ! b' w9 L5 y, o+ D; K4 T) Z
- * User: user
5 \: E0 m- l* o% c7 [
/ [: [5 g/ U9 C- |1 v& M- * Date: 2018/8/163 o+ {" w/ S" G/ p& v# W
- ) K; s( N0 {& z/ C; M3 }6 J: d
- * Time: 10:43
. N- w! P8 Q. ?
# e) z9 H: V: Q) y. B- */include "./qrcode/phpqrcode.php";$txt = "测试内容";2 b( A) @+ ^. i6 a c" P4 f- v& \+ F
- ' E8 M6 d5 h; y/ \% A) p
- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称& ~+ u, a6 J/ E
0 T+ J9 y w" _- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是: ` Z9 T) r( A
3 Q! U6 O+ K) p3 S* S- $margin = 2;//边距
5 p% W3 S& ^' l; o3 I4 {
5 j) ]" [% @) F) m+ V* M- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片2 i# l- y# g9 Y/ p( S$ |% [
c2 }1 r' D& Q+ n# u- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){ W0 i9 H2 ^7 E, l$ |5 r
@' G% c3 Y6 U/ @5 K+ _1 d" B& a- $QR = $picPathAndName; //已经生成的原始二维码图
% r4 O# [1 {0 H( I% r0 [- Q6 K% u
2 D/ o2 C$ B/ F4 E/ g- $Logo = './pic/logo.png'; ) U& K7 I8 {6 X: H7 g
- 5 j- y3 ?9 ]/ M* g6 g
- $Logo_re = './pic/test_logo.png'; : x9 i8 o: I# p+ r% l* c- g
- 3 O L" s6 z! g8 m" M7 }7 W
- $QR = imagecreatefromstring(file_get_contents($QR));
) T" ]! J% Q0 _5 j/ D: V
) J6 p5 z- L( f/ D% P- $Logo = imagecreatefromstring(file_get_contents($Logo));
3 `. x1 T1 ]: o6 r - 6 M6 S4 ]" U u' e" A
- $QR_width = imagesx($QR); //二维码图片宽度! o' P& e( ~# i0 N
- & r9 n- U5 m) l$ W: Y
- $QR_height = imagesy($QR); //二维码图片高度 k% Z9 d }1 d- R( [
& ~$ @0 f/ v% @, ?6 n1 ?6 i6 E: R- $logo_width = imagesx($Logo); //logo图片宽度$ I! @; f' m7 w7 f0 ~3 J6 n
- & a! H5 ]2 k7 b- X' h
- $logo_height = imagesy($Logo); //logo图片高度( L! q4 \. q! w
- ' }8 d- L0 |6 o, I! u- n; l
- $logo_qr_width = $QR_width / 5; 5 p4 ?1 k" u! o7 I
- 4 e' D: u0 Z& i# s
- $scale = $logo_width / $logo_qr_width;
5 U& l: l; B. W; w5 O' o5 h! ]
! W, E1 e8 @ ]+ g. X. k- $logo_qr_height = $logo_height / $scale; 4 ?; w$ y8 J" X5 t* |
9 X/ Z! I: G3 F. M V0 z" H- $from_width = ($QR_width - $logo_qr_width) / 2;+ K+ O0 t$ g' |) F0 a4 g7 y+ ?5 [
9 ?" Q- z4 e/ h9 C( z; ^+ V( w- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height); * H" I6 Z% \& r c9 z
- 7 Z$ _) \' K2 u; `' w
- //输出图片
; ^5 @$ Q5 {8 q; |0 X - , I# P1 B! o+ @! M+ D$ u+ c
- imagepng($QR, $Logo_re);
. j% F& s: Y% }4 r8 L- {
2 k$ K6 K: j# {( K9 s1 C! e2 b- }
: S& R2 b" x2 M2 H; j( g' z! i1 [! [
. x' h/ {# P4 @- h8 ^' _* L, n# x
8 m9 ^3 ~ e- T7 `$ i0 t' o* u
复制代码 3、qrcode_vcard.php (生成电子签名)/ I v& S* ]- \3 @0 x* F3 ]6 L
$ q. g0 h2 B3 M
vCard格式:https://zh.wikipedia.org/wiki/VCard& `, q/ \ ?, G$ r3 U. |( }$ X9 y
* i% H; H5 I2 {+ n
- * S/ \6 g- X! V1 \4 ?: N
- * Created by PhpStorm.
" q _) j) Z1 P8 D6 n% T3 K - 1 w- U( u4 t0 l7 J
- * User: user" u5 ]: w; N3 C- c0 m
- ' M$ U, ~' z3 f7 t( U. h+ k
- * Date: 2018/8/15
5 U9 q1 w P/ S+ H% v P - % X: P2 u- j7 U
- * Time: 23:00. S/ x0 H, N8 \; Y: C+ ~! p& M
+ _! [: O i5 F+ ^1 V- */require_once "./qrcode/phpqrcode.php";/**
& k) a) Y: E8 L3 j. b% n; ^
8 X& h0 D4 I# z6 J/ W2 w( I. ^- * 生成电子签名) @( T+ @- j2 \: `# B
- , i ?( L* F0 {& j5 l! n ]
- * PS;使用微信扫描二维码1 |7 G' j A3 S3 n2 o% K% ^
- 8 `& G5 \5 s. j$ `# P/ `) x
- */$content = 'BEGIN:VCARD' . "\n";//起始标志
- D. \6 |) u1 Q
! ~7 S& B+ {3 q; c# V( u5 e- $content .= 'VERSION:2.1' . "\n";//当前版本0 z% Y4 [. T) V; F R6 I
$ E- l& S$ W4 M; |* d$ U4 s- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名
! P h( N1 d+ z2 g' m% K
- G) t6 c/ n1 f! F. E- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称
/ r/ e* ^$ \, g1 W$ I9 B* X6 s
5 i6 f& L! t3 y$ d n$ m2 [! j& A- $content .= 'TITLE:PHP研发程序员' . "\n";//职位
# z5 Q1 p- p1 y" i1 p
! j" z) G& D1 O" G- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话. g: l4 U2 Q: f0 q1 u1 N% u- a
- 6 d% [; Q4 `* g. q
- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址- y5 X7 O3 ?* k* j
- . _- S( I+ d) x/ c2 p& w
- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)3 h: c; h. A0 A0 d
y- ` y5 g% f* ^- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话# Y' A; U* I5 X
- 7 G( x4 t" {) U0 T7 z8 n
- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱 n, X8 Q( j& J
- , C3 e5 } A# u/ h! Y
- $content .= 'URL:www.baidu.com' . "\n";//个人主页
% b- K! `4 x% s8 q1 q
* S7 D: S5 w( V" R- f& F- $content .= 'END:VCARD' . "\n";//结束标志( ]6 @: ^* M: Z% A) }
) k5 s1 g6 |5 M& I' C. g& t- QRcode::png($content);9 d- n1 I; b Q. @
- ' L6 c: U4 L5 L% L. g0 q; _( J) ]
- 6 N8 B4 g0 M3 ]$ L8 b
复制代码 2 Y6 ]& E" ^# K& H
相关文章推荐:$ ?: }* r1 O9 p
1.PHP生成微信二维码实例, x0 m9 X1 k( B
2.php网址转换生成二维码
0 Z: W4 U) [: I+ s相关视频推荐:- ~+ O$ ^+ x* E5 ]0 {& K
1.独孤九贱(4)_PHP视频教程, y5 Z9 h/ f9 j2 S
二、JQUERY生成QR CODE$ b6 I! z9 b0 ~$ X5 E
源码地址:https://github.com/jeromeetienne/jquery-qrcode. {* h4 ~6 f+ n _; L. t
$ [6 ?! f0 l' s x& yjquery_create.php
" W) D2 j0 M: e& w' g8 ?- D2 u* Q) G5 ~5 U
- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码
! X4 y/ t0 ^# P8 p( T9 d三、PHP识别二维码
. k% ? f, w4 Y) y9 \1、方法一
1 u0 n. R6 k; Y6 O @环境需求,安装如下扩展
! C7 q! H* a6 P% Q( e- ImageMagick
2 I/ V, ?/ C ]' a& S- zbar
& s2 K& P- s6 I7 b$ X- U- php-zbarcode9 c9 ]" j5 ]# Y8 P
1 ~3 b0 a2 v; x# x5 D, ?6 ]1 p
2、方法二
! r' L1 f6 C. E6 w( uPHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以+ z( S* W6 [0 w* b* x& Z4 m' z1 T
qrReader类:https://github.com/baagee/php_QrReader7 C P, {& Q2 r0 Y" c) i
* t$ f$ b% O9 p9 O! K
+ j" T- I2 o8 D; i2 \- Z* ^- $qrcode = new QrReader('./test_logo.png'); //图片路径6 J; M* b) J+ I
Z5 R: m, z V# a6 [- $text = $qrcode->text(); //返回识别后的文本9 x2 C& z2 }6 U0 g7 m' O s
- / v& O# J* q1 F3 o
- echo $text;/ r' `; s) U3 b9 [7 M- j, Y
- b! W0 v) N% z
6 q4 @, S0 ?( F7 _
复制代码
; b% F' W5 |0 P/ {2 Z链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7& u% a" b$ @3 {5 X# h7 D
8 `# K2 H; {0 {9 }* d1 N7 Z7 l6 Z2 D y |5 [7 a' \% V- [/ n* ]
4 s4 v, n# j4 S& X+ I l- i# r( |" s# M
& @" o) |# ~: @$ O; ?
4 V( s0 [$ P! M# S0 z6 ]% J" a7 e
! |" a5 f1 }! x2 ^, t9 X: L" J
; Y' s! o/ b' d( {, c& {1 d- l" ?5 S" E' j. Z! @! y
|
|