管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
- |( _, k0 x- ~2 t! v% J---------------------------------------------------------------------------------------------------
+ q0 {3 C2 ?/ n" N' ?二维码的分类4 o& k9 |& o# ?# r
线性堆叠式二维码
- O# L1 j9 u, m( A: c2 |
$ t; G! s9 b+ o3 k- M7 J1 h! ~矩阵式二维码, L s4 p! f% l
3 L# x: k F9 ^( B! _/ k1 @. ~二维码的优缺点
4 E: x0 ?! y5 N) R' M+ E* Z优点
0 ~# Z" M6 p" U/ e6 s& P3 A( G信息容量大
q1 t, F6 p0 x& K# M' `. o) J, C. L. r# j. R( L$ s. }( x1 ^3 J
编码范围广
0 d; d% W- E* m' d
3 I! h" I f2 E容错能力强1 Z& f7 { I. D; ?" d: u
2 r4 W E' k" P f
译码可靠性高
$ Q" F/ [2 q: Q. Y/ t
0 x# I1 d' C: a! x; s8 N可引入加密措施
+ z$ h- z) M$ n/ z) c2 a: [, E% Z5 a$ m1 s+ g" \
成本低,易制作
j) N2 G2 l: ^2 Z) e2 Z' s
( U7 Z; T5 g O1 F8 |6 f( M1 Q6 C缺点
0 s2 m$ r& }, |, `$ y* e; s二维码技术成为手机病毒、钓鱼网站传播的新渠道
+ O3 K: w, A7 Q f7 ~0 L2 K% q
信息泄密
- M4 e$ U7 i( P0 f' d; @
2 c0 \, ], j' g3 c/ V- f4 Y1 N目前流行的三大国际标准
5 A7 B4 g: `" |% N8 vPDF417:不支持中文+ A/ V/ s8 j% N' b& V- y3 x9 E
~$ } M8 s5 G/ s7 y1 C: p$ F" _
DM:专利未公开,需支付专利费用
9 @0 O, Z+ T+ ^, I7 W( P2 x! p, L" r% L& v! ^$ M: g! h
QR CODE:专利公开,支持中文# O' V# M1 J. s: Z0 ^
. B' R- v v) r) P: K6 n$ XQR CODE 纠错能力8 n% F/ u3 ~( ~, k/ p. R/ ^
L级:约可纠错7%的数据码字
6 W- N3 Y0 s9 C+ n4 }. P' w& P
/ E% O' L9 }. y6 H$ g6 NM级:约可纠错15%的数据码字
2 Y4 v1 L! x6 j% E6 `3 X. v9 \$ J/ w! F; P' M) k
Q级:约可纠错25%的数据码字. c K8 L/ @4 B( G) S
3 @' Y: r9 E- {; j8 wH级:约可纠错30%的数据码字8 X0 A3 X: }) [7 k
% X) r. q$ D% g9 D# w4 A
前提条件( s6 t& K& q% w# }; V/ `- H
GD库
1 s n6 C5 t1 l% W7 W/ j- ?, f( K# N: c5 Y, V, |; `9 X5 ^7 D
一、PHP生成QR CODE2 c: T# s* M8 ^9 ], l% b
官网:http://phpqrcode.sourceforge.net/
1 C" }. I. U l2 X" Z1 O
3 ~# P; U4 S5 C! r. ]3 y; c, V! r下载源码:https://github.com/endroid/qr-code2 _4 W" l& `# q J2 g
: u9 c8 J6 X9 l: Y4 }' q# l( Y" B目录结构
3 e6 r7 O( v& O! @ j
& i) W3 x' Z, t0 r+ ]+ z% B
0 \1 s- M' U. T" q1 w1、qrcode_create.php
+ D7 e! l' N5 C3 Yps:生成普通二维码
0 ^: U. y: J" @# V8 [4 c- " ]4 ^3 k1 M& U( K* Y
- include_once "./qrcode/phpqrcode.php";/**2 a7 R% O0 m3 B6 V7 m% ^. |1 c8 Y
7 {/ W* A y* V+ v1 m- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径9 S! H4 m. w8 d6 y+ x, ]- s
: {0 Y1 v5 t$ u- ^3 D% \1 P- * 在浏览器上直接生成一个二维码(内容为abc)2 ?# {* z& ~: E$ V: ~
3 Z; H3 }/ R5 D: p2 N- f- */QRcode::png("abc");/ r, G$ W \) g. q3 d+ ]1 L
- 9 ^# s% f; I a2 \2 U
- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**& V' ?# ]. f: @$ N. V4 E
& j1 C- j/ ~! q; k& b- * 生成文件到本地
# g ?+ W% b! j+ }
+ p8 Y: `+ W9 g2 y6 f' Y- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)8 J8 b7 x+ S8 v, Z6 O# ]+ O
- 4 x; i$ @6 I i4 v
- * PS:$saveandprint源码的p6参数做了修改) j3 i3 V% Y" J1 K; T! S- a
& f' g: |6 Z. w1 x7 S- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);1 f9 Z" j. |( c/ M' y: T3 T4 c: G
, U% w" Y+ A3 b8 t9 F! d' {( g
, \2 X# }8 p. s% Q/ v( U+ z+ K
复制代码 0 [6 t9 O+ m* R8 ~) c% Y
2、qrcode_logo.php, k* d7 \& Y: N( Y
ps:生成带Logo的二维码
2 ]( }2 G9 Q7 @1 J" p1 T- /**
2 L9 B5 l6 H! d% l8 Y6 Q; }5 P
e0 m; q1 E: G' w( h- * Created by PhpStorm.: R9 n* R1 E' g+ C, W
- # E3 r6 s: `5 ^* S- Y
- * User: user
( F: q8 D, O5 u7 C7 \ - $ e: P& D7 G- C# C3 ^, I7 v
- * Date: 2018/8/16
# B7 D( @% j+ b Y, z1 Q
# J E% ?6 m* y* @: U5 _1 @" t- * Time: 10:43
2 L9 P# s2 t; ^- @" P) O - ( v& W, [5 \7 U c" _ N7 ~
- */include "./qrcode/phpqrcode.php";$txt = "测试内容";
- ]' k7 Y; b: O' T' ?, C* {* G2 J - ( A( O7 Q, M) s" {
- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称
/ d# x& L& @1 Q, W, e - % i* s {5 z; n, Y" w
- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是
% ]' l% ^: L. T, B j; @7 ]2 _" O4 b' o - ) W7 `$ O9 U# j* {2 V6 O
- $margin = 2;//边距5 D. |/ e8 E, N% G9 B
- ~/ }6 }4 `, U1 I' x
- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片2 j- _( s- G) F8 Y, [
) I. s9 n) ]6 J4 B& R( `. q7 u7 O- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){ ' q; H0 j' E3 N9 C; E
# K$ p7 h7 e% ]# Q- S- $QR = $picPathAndName; //已经生成的原始二维码图0 `. J9 C7 ~, o* m- c
- 9 a5 z& \/ F: z8 i, }/ q' [
- $Logo = './pic/logo.png'; 0 y' g( Z6 Q/ _5 C. @. c
- : h; J+ o6 t' q+ V) S! v& q& |* ?6 i w
- $Logo_re = './pic/test_logo.png'; X! F1 d3 q5 Z) K7 r
! g) s% X5 {. f+ n+ K$ q! L- $QR = imagecreatefromstring(file_get_contents($QR)); 5 W5 _" N# F. |8 n/ x* T
- 1 q' `' K/ J& h7 O: i: N) v6 m
- $Logo = imagecreatefromstring(file_get_contents($Logo));
& A. j ]' ^* m1 @/ j/ ^
- L7 ^' ^5 g" Z+ P" q+ s- $QR_width = imagesx($QR); //二维码图片宽度
6 m1 ?# h( O( I% U. y/ b8 q - ' y9 M2 D) P3 n$ T5 ~2 y
- $QR_height = imagesy($QR); //二维码图片高度
, |$ g. z4 o7 ~ - - H- t4 }7 c! e. c6 }. Q$ K b9 e
- $logo_width = imagesx($Logo); //logo图片宽度& K4 H& A- |. ]! w$ v" _+ o
. h; p3 G+ D/ _1 z- $logo_height = imagesy($Logo); //logo图片高度) \ l; \9 ~, g
6 h a& |. _& S" m- $logo_qr_width = $QR_width / 5;
* v3 M4 k8 }, ?1 I% k& r$ Y - + l/ ?7 e m5 O R9 s7 z0 N
- $scale = $logo_width / $logo_qr_width; ; V/ f% p5 L* U5 c) m2 b& x b
- . g5 O4 O7 y* T% M
- $logo_qr_height = $logo_height / $scale;
0 ~: W7 Z( a4 w6 ^1 @
& H" z- l0 [* o: [9 C- k- $from_width = ($QR_width - $logo_qr_width) / 2;
5 q- Y) b' E _$ e7 J9 d! f8 S - ! I! ?1 R9 {& R" u. \
- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
0 H5 [! v2 S: W+ z6 V( U - 4 j O/ B) j. g2 a- Y
- //输出图片
7 e3 M$ x, E, Q8 i+ G! O- n
5 e* ]5 P3 Q0 M$ {- U- imagepng($QR, $Logo_re);
- F/ T+ ?& ]7 B' B9 P8 A
- [) F i' P* U# |- }
* Z& o: }( a$ y& a& _" p
4 _: D) k Q' P! w* D: `7 K
3 b# t3 |+ Y$ {7 d' i) X
复制代码 3、qrcode_vcard.php (生成电子签名)
6 G+ n0 t) u A
" q. O2 k) T. [! `) U4 {vCard格式:https://zh.wikipedia.org/wiki/VCard
* q% L* }; `' a9 m* l& e, Z3 Y2 A/ b6 }, [7 P. P+ m
2 u4 j5 e, _) s1 v, U- * Created by PhpStorm.2 h- I$ X8 g1 C# V
- - c8 g1 Y: ~; Q. t1 c/ k
- * User: user9 A( b9 N- G3 ~; d" z/ X/ ^
- 7 Y) r# J0 p2 E, f/ i7 l, x9 G
- * Date: 2018/8/15
9 G6 K2 a v! x: j5 v7 x) A9 w - ) A7 v, q3 |) C
- * Time: 23:002 G2 Z; [3 r5 R6 t8 n0 w: G! b J6 h
- 1 x3 r7 P+ e+ _4 _
- */require_once "./qrcode/phpqrcode.php";/**3 r3 {' }3 }8 m
9 }* C& Z& s0 J6 s8 g0 v( M- ^- * 生成电子签名
: Y, U8 v$ A' e" [1 G - , ?5 g2 { S$ _
- * PS;使用微信扫描二维码$ X4 M; @) p9 m: z1 x! i; g( w. [
- # G3 x# X: |) U7 y* W" ?9 T. K
- */$content = 'BEGIN:VCARD' . "\n";//起始标志9 F. G* |# U' R |+ g2 H/ D
- + Y: X+ r# c- |0 h P4 p
- $content .= 'VERSION:2.1' . "\n";//当前版本
) s0 b! z# S9 v$ [4 ?
: I' T! x' m! o$ t9 j- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名: [! u$ W1 i+ V; G! N; c
- F5 D; z# |" I; d
- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称
9 t$ Q# e4 S7 v. v. J& e& K9 P6 r
$ x. \" w z) o0 C- $content .= 'TITLE:PHP研发程序员' . "\n";//职位
6 e3 i4 X- u* s7 @' q e& _ - ' }# s9 q4 e( B" H
- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话4 O' h0 A# K' X% ~, G
- 6 d$ |1 \' d5 E2 ^' H+ i8 i$ {
- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址
. }7 w' I" {( B: @3 ? - 3 K0 L5 p# z8 r' a6 R
- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)7 N8 F" m' c! {" r
- 7 H* n9 P; S5 o A
- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话
" N3 a& G- j& V0 U3 x' J# ` - 3 m. E* A7 r; S- e4 p) `
- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱# D0 f7 z3 d8 g$ u+ x) i# }
- + j9 I( G( F! z( @- O
- $content .= 'URL:www.baidu.com' . "\n";//个人主页
V( y/ h5 U# P( {# z6 i - 8 [. b1 c* H4 n& Q5 W% H; H3 X- R
- $content .= 'END:VCARD' . "\n";//结束标志6 O) A" E. k- T' N
- $ G- W( z' m7 j
- QRcode::png($content);+ D- f) ~( I8 P# G3 J- Y" d
- + \0 p4 J, ^$ r9 e5 I
- + N! X- U0 K4 Y3 J
复制代码
8 b: k5 A3 _, X) y4 B相关文章推荐:
6 h+ z. i; k+ q. t1.PHP生成微信二维码实例
: M7 Z6 J/ c: c2 Q2.php网址转换生成二维码
& d* i% ?3 J, X1 M5 |) Q; G相关视频推荐:
" @5 v' a# H* y2 l& C. \) C) Y: U1.独孤九贱(4)_PHP视频教程
3 J1 R( X0 T/ X6 r+ I x二、JQUERY生成QR CODE, @3 Q+ K1 _4 W3 }
源码地址:https://github.com/jeromeetienne/jquery-qrcode
s% [9 B5 u/ q" x$ t; U* F1 }# G6 C1 @7 Y: X, B" D
jquery_create.php/ t3 S, W: d O- b
% L1 k! i5 K# [5 }# l) Y7 N6 D
- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码
8 k/ V. P+ R( G y& k三、PHP识别二维码
; B% G) u/ H8 Q! @0 ?7 v1、方法一
) p/ F' Z5 t/ I5 O环境需求,安装如下扩展- k7 N/ g5 I8 Y8 C7 x
- ImageMagick9 T) E$ \1 ^/ N1 u6 p" l9 a f
- zbar2 [7 m! Q% R( m. D* N: C
- php-zbarcode
- K6 p s+ F3 s) S r, Q3 b T6 j% g0 q, E* H
2、方法二! g# G9 `! d9 h$ H3 L0 P
PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以7 X0 s; p8 g$ ~- B. X6 _; y1 |3 D
qrReader类:https://github.com/baagee/php_QrReader
5 J9 h" w; w1 K) b- ]. v& @5 h4 _- S
' C( l) x# ]( F" s9 Z- $qrcode = new QrReader('./test_logo.png'); //图片路径
$ I& r" y! d# Q! Z
, X* u* i% U1 M/ T" f5 W3 E* p- T/ S- $text = $qrcode->text(); //返回识别后的文本
. j9 V/ N! I9 Y9 @* R - 2 F9 e1 o/ N' d
- echo $text;# F5 H7 l* S% e' c8 t
! M J# C2 P( h5 j0 x
- q; M% `' R/ r/ d0 Q$ ^% ~8 R
复制代码
0 @! a; z) R2 L: C2 t( S链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7, `, F2 A" w6 Y/ W+ v
P0 H1 x1 Q) F `3 c; R" o& i; {
$ R2 Y" l5 h& U8 c
5 ^3 f5 R6 i, _* }& V
8 Z, \! q" y0 G( u* {2 X" F' m6 R/ ^" V2 L/ j4 Y( B) n S, Y
- v8 y$ r' y9 [ e0 C; m$ U/ l$ [4 `' I1 v+ l% _' e8 e
9 }0 y2 e- o. v6 b' c: H, }
( }3 e9 x+ P1 b9 s; k& l |
|