管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
0 g8 c% a. x( V) |. y---------------------------------------------------------------------------------------------------# j! h& h: A; T. c6 S
二维码的分类
; V. J; X9 }$ g) a6 O线性堆叠式二维码- Z/ [6 f7 `/ J$ K* W! e3 K$ D
. [& O1 E! ]4 R8 A, c& n矩阵式二维码
, y5 @+ C( s% B& q! E
3 E8 k$ l& _, y2 h# s二维码的优缺点
' x5 Z& K: R a7 B1 E- B优点# O- y' P; w+ Y* \
信息容量大
; p1 E" G( S: F3 K U4 z6 c3 Y& r% h* V: X2 ]5 K. K
编码范围广
+ q$ E- N g# j( a& v% C, }
3 A6 L. I0 l! d5 F9 q- L容错能力强
: S! S: c8 Q& C3 W+ M3 K% h$ {
7 |0 j$ `( N: Y1 B2 W9 V译码可靠性高 p& @3 v+ L; E. b
& a4 v$ e. g7 d7 C
可引入加密措施/ G% M) d/ f1 H! x* }) I
0 h& \4 r# Z* J7 v+ Z" U* L: F成本低,易制作+ \$ Q/ V9 ~' p# U( n
; U5 ^4 ?$ r9 [. s& v$ D缺点6 J4 ]+ p0 ?7 [* u5 k# Z
二维码技术成为手机病毒、钓鱼网站传播的新渠道
) R% X. ?& c2 T9 D/ v5 B1 _
) j9 f1 T7 u7 N信息泄密4 g' E/ P: i% p% v9 t6 a
2 P/ `% H1 R. ~目前流行的三大国际标准
! [4 n8 S" T! Z5 R& |PDF417:不支持中文9 a& J9 |0 ?0 ?
* m- C, A& [: ^& N" Y! z: ]DM:专利未公开,需支付专利费用8 ?" z0 G; `7 `: {! i' [, C
- D. o; [- E8 X, a9 E. `
QR CODE:专利公开,支持中文
8 N! |- c; K- n5 P* {$ ]1 y. Z" v6 f5 `6 V/ Y: B
QR CODE 纠错能力0 N$ V, d" o, y% _
L级:约可纠错7%的数据码字
, ~' x8 s8 {9 P, ]5 c8 R3 D# u% K
M级:约可纠错15%的数据码字2 w. q/ U- [ ^9 g- H
. r; \, |( y4 o6 _' ?Q级:约可纠错25%的数据码字% c/ K# X" j% u8 ^ R& j! E$ ~
- F& Z. k. B: P; x- mH级:约可纠错30%的数据码字
. n3 _0 U% P% q6 W+ g, X9 g- L1 q6 T
前提条件" n9 C4 F7 e" j ?( Z- `3 `
GD库
! s* u: |, ], I1 H
3 a. K: E# \! g) i一、PHP生成QR CODE
o: H2 O. D. l, w) I h' j% Z1 c官网:http://phpqrcode.sourceforge.net/
' W$ n p, ^) p; w+ l/ E. I7 R, G) C- E* ?7 \; Q0 C
下载源码:https://github.com/endroid/qr-code
2 {. R) R: F' k0 h( R( r# y7 L# @( {6 V8 n: P
目录结构
. m' F, S v. H& l) K
+ K. c" c( _1 Z4 E2 f
! ^2 m$ F8 {" F) n8 X; I& H7 _
1、qrcode_create.php
& I+ }& N% q( R1 {7 P6 w; l" @ps:生成普通二维码+ e/ U1 u" i! i
; z2 a0 e2 a3 ?. x7 P$ e- include_once "./qrcode/phpqrcode.php";/**
) z1 z7 s1 l- }2 y( m1 B T* ? - % g) Q2 y1 n% ~9 C$ n( f9 |, T8 `
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径
$ [& K9 E6 r/ h- Z$ R, w3 p$ u3 O
5 X, I9 m3 ?1 }: O- f* O- * 在浏览器上直接生成一个二维码(内容为abc)5 F# s1 b% M- Z+ B6 ^
- 5 T5 z( ~4 K7 H8 L% }( z* M* Y
- */QRcode::png("abc");
# ]) e* ?, b( X4 S0 f! b* b - # v3 i- C3 ~ `( e2 l4 y/ P& K
- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**
' H7 x% @9 v4 R% J5 c8 h- Z1 X3 N2 N
2 g+ t8 g: P" ]' \+ z+ F+ A- * 生成文件到本地8 K1 y8 T# f% m: A0 e
- + e7 b' \" B: U) [% d
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)
! H' E3 d* u+ r g8 R
- ~! f4 z% v* S2 ]1 G- * PS:$saveandprint源码的p6参数做了修改3 N: K9 M/ c* P# r+ b
- ; Z( i0 n9 _( w- u" R! |
- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);) w$ y G- ^4 E" L; A
: A N2 h( p& ~% f/ @& F( J- 6 v% ]$ e0 W: Q# V' ^
复制代码
8 P) C( w+ i: {/ J# a2、qrcode_logo.php- {, |9 ^5 C' y7 ?- s' v
ps:生成带Logo的二维码- # l$ e* L+ R3 b# O; R$ r! b
- /**
' [; o2 o$ w& d, g: u
8 K( k5 \9 R( ~: {# \) z- * Created by PhpStorm.; c3 ?: S x' Z/ t. U5 o
7 l: s7 O+ H# t* {- * User: user% N. P" P) d7 S4 j
* D+ g# w- ^, Q$ s$ L' }$ H- * Date: 2018/8/16
2 a5 v. F+ M1 x - 1 M, T6 k h, T/ p# c; K2 H' x$ ]
- * Time: 10:431 f. }5 Y# \; U6 B- m- J( C; J! q
- {! k4 C) U7 |- o% f
- */include "./qrcode/phpqrcode.php";$txt = "测试内容";
4 P! f; h9 c. e2 b( Z
5 w4 T2 b& j, B0 r" `& f c- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称8 G0 w: m8 G# D! A: G4 u0 p
& Z& c! F3 {' e6 \( l- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是
( W* p- J7 Y" m, r `- U
' c) R6 u: h) l4 j& x- $margin = 2;//边距
% b& G# U' R- c# m! R2 x( |' b
' Z8 X* c. k5 `6 u3 ], U! f- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片8 I9 u! k- r$ L" ]2 c) ]( A1 X
* {6 f& K1 j7 ~- ^1 j- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){ 0 a9 }2 p2 ]1 Z: U. c3 u! J
- * b0 c9 w) [+ O7 |& a- l
- $QR = $picPathAndName; //已经生成的原始二维码图 [0 b" m( G1 G; r2 n
4 y/ ^: ?, ^; L- q- $Logo = './pic/logo.png'; 9 _" l' j# t m% |
- - p$ e' O, g, y* j( W; Z
- $Logo_re = './pic/test_logo.png'; + m# J+ U3 \. {: P
- # z& a! Y' D( Z( X H5 f% c
- $QR = imagecreatefromstring(file_get_contents($QR)); + m" {* i4 r' N
- 8 W1 N) ~& r4 A# f8 I
- $Logo = imagecreatefromstring(file_get_contents($Logo));
: \3 J+ A7 A) P' k& k - 5 l" d4 \1 E3 d0 A) q
- $QR_width = imagesx($QR); //二维码图片宽度
1 O# G6 ^8 l9 c! c& a - & p' R( n- E; }4 k& }6 Z8 h
- $QR_height = imagesy($QR); //二维码图片高度
4 ?' w& ?( z+ F. g: o5 D/ F
& H- [, i: @( M" \0 }' B- $logo_width = imagesx($Logo); //logo图片宽度% K, M, J) r9 @, g/ `' l5 T: D0 f- [
- * a; B6 k, T. A8 i+ |7 b; X
- $logo_height = imagesy($Logo); //logo图片高度
, k. l+ M( u Z) }1 u - & r' u% s, V/ l) s0 t
- $logo_qr_width = $QR_width / 5; 9 U* k, p2 [: [7 F; a$ y
- ! X6 c( k u8 E3 N
- $scale = $logo_width / $logo_qr_width; ; Z u& f ]. w9 w# \
3 _' m/ R( P* g% ?& e# [) D( p- $logo_qr_height = $logo_height / $scale; 3 s; x) x+ r5 D! q+ T0 w
" O+ B9 b8 ^2 b4 e9 x- $from_width = ($QR_width - $logo_qr_width) / 2;
* D3 j1 y" j3 m7 i - # D V1 L1 `+ e9 ]
- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height); 3 S$ W2 f) z5 |& R* b
- % h8 a( [+ b2 ~0 n; P
- //输出图片7 _3 J6 E' a5 H$ I( n+ {( r$ p
' _. J$ e& f9 _' |5 u' W- imagepng($QR, $Logo_re);, q! ~6 ` V: N; X0 O5 T6 I( ?3 }
8 a" z, _6 [9 s" w! I- } Y' l% E( m' F
- 1 q7 S4 }) e( w/ S6 [" F# \# C
- 1 \5 R1 ?6 d+ u( @
复制代码 3、qrcode_vcard.php (生成电子签名)
1 }) I( F" T9 e% W! ~4 X$ k! \; _) X- j$ l8 |% S' R$ R& h: b
vCard格式:https://zh.wikipedia.org/wiki/VCard( s- ]2 r/ B" y' U$ w' }/ H
' m0 s# C. h9 [* a
. ^! P( v9 u1 k' U- * Created by PhpStorm.
+ G' S$ U: D2 G6 h$ ]
* v0 b, ]; H8 S8 n0 N2 Z- * User: user& _5 h* i/ x" X) g0 e) t7 m- A
* \# l* \% s: Z0 u- * Date: 2018/8/15& n) a. H; g/ R8 F1 B
, ~: v0 H. U6 C4 |5 }+ x8 i- * Time: 23:00) y0 i2 k& `9 K
1 k7 L$ E4 x. m+ h- */require_once "./qrcode/phpqrcode.php";/**/ G) E* B, {/ a8 [# q
+ n6 \' q: ~$ Q' ?+ v. ~; ^- * 生成电子签名: _" Y: X! l3 g. F5 W
- , D; S8 }4 n5 ?6 V; d8 G
- * PS;使用微信扫描二维码
9 [, D! @. p0 v6 u+ o3 C
1 m5 H" O. z+ w* G/ I5 ~* G- */$content = 'BEGIN:VCARD' . "\n";//起始标志9 O( O& S. z1 W1 {* \% _4 w9 G+ q% V
- 9 O0 B: M- Q& S' j+ r- ]. z
- $content .= 'VERSION:2.1' . "\n";//当前版本
* R7 T9 R$ K7 }* q
7 n3 i# { ^1 U/ p6 G1 o- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名
: K* L3 `# L" ?& }5 O5 O7 A C3 o8 | - 2 h/ l7 T. E$ ~6 t
- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称8 l! {: ~2 ]# b
- ( n+ M# o$ R# l8 V1 r+ |% i1 k
- $content .= 'TITLE:PHP研发程序员' . "\n";//职位
' X( H+ u" \7 ` N% o3 w; } - : h2 c# ?! ?5 D$ M: B4 N5 \3 E
- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话
7 F* { C# n/ l' T - ) ?/ g s# q3 r# e1 K a8 J( K
- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址
( k* g4 H$ v6 i: q9 Q - ! b1 G6 q2 f! P
- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)
! G% C: i6 T" \0 |% R5 l1 r
Y# p$ w5 x* ?1 Q- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话
5 k! i. N* B. B! T5 l
% |. }2 M" B! h4 W9 j- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱+ i6 |: b# U+ G1 ]
' P* c5 ?2 B" l7 T- $content .= 'URL:www.baidu.com' . "\n";//个人主页
: ~. e" ]* Y L4 j
' g$ _, b: j0 f: J/ B9 y5 r, h- $content .= 'END:VCARD' . "\n";//结束标志0 P' u, v5 |8 w9 }0 A
- 8 O$ p6 z- U$ r; a k/ n7 J) A/ d
- QRcode::png($content);
* z7 b9 G/ D6 {& g0 Z" p0 ? - # s" e# O/ d; I2 `* Y
- u5 M! x: I# c4 e7 I. ^; @
复制代码 + h/ D- m. y5 g& t+ T O; ~% t, L
相关文章推荐:$ f6 F& Z# N8 _+ V! Y! d
1.PHP生成微信二维码实例
3 L* |6 J8 x9 J8 P4 z2.php网址转换生成二维码8 F( u% f9 X* B4 N
相关视频推荐:
% v$ q% x* ]) l1.独孤九贱(4)_PHP视频教程
/ L- y( x% n, @1 `. u0 L% A" U二、JQUERY生成QR CODE
M" L6 D" F, e源码地址:https://github.com/jeromeetienne/jquery-qrcode
, R6 c K E+ b* W& u2 ?
( W# z7 |$ p B5 Cjquery_create.php
) V, T: ~. [) }7 Q G: [# e7 p( K4 L
- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码 ( U. n4 |4 f4 U) X
三、PHP识别二维码 [9 `& I/ K# H1 u
1、方法一: F8 x3 E# C6 T# u7 D0 E5 d
环境需求,安装如下扩展9 R5 @. O& N7 b8 T: T! C
- ImageMagick& M* u3 c% q9 o
- zbar0 u; P8 C" \% B; N4 ]$ y
- php-zbarcode
, a5 r* p0 [, D# t3 ~# U
$ T4 m2 e3 j! E2、方法二. ]1 z! c/ v( d+ ]: l. l# r
PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以
3 i- ]7 I0 \/ B- {! ?qrReader类:https://github.com/baagee/php_QrReader
" `" x$ D. H6 R* M0 g0 W; I3 @" _3 S- x& c6 [: V/ ^
- + \' x5 B: d8 i% D& {
- $qrcode = new QrReader('./test_logo.png'); //图片路径
- F, e! ^; p z: f9 {
4 L7 O1 Q" V. h/ Q+ Q- $text = $qrcode->text(); //返回识别后的文本5 `1 m0 ?; }7 a9 c0 y! z6 J2 [4 }1 [
- # Y7 {, a/ ^+ U! e* U
- echo $text;
1 ~# {% W, G/ U
; z* x+ x4 q+ T1 C' y
- n0 b' h% w6 w" b7 L
复制代码
2 O/ h3 c' r) ~+ S链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7. w6 F7 e: v# W6 X. x' P5 w' K9 j
d$ Y/ |. D: g$ P- }, p
6 V% z, ^! n5 ~4 x5 ^& ^6 `: k" A4 ]' c+ Q r9 V, q
* e) F( q* u7 _) `' I$ p c
4 p4 B2 V& o: A ?. C1 M
9 G" q. j& H) w0 k- j c, i1 f* E
6 @; ~9 L) F) j" [' ?, E6 \; s$ _5 o! {9 o2 O0 u {
* K; ?4 ?" l. v5 j3 [8 j0 G3 K# k |
|