管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。% c( a, X6 }5 f+ O3 p1 y) _" S% \
---------------------------------------------------------------------------------------------------5 q/ B* _7 Z- {( H
二维码的分类
! B6 H+ [; X# Z7 z5 R线性堆叠式二维码
0 q y: s3 W0 A9 R
% |6 Q5 k( D: K2 b8 Y# z( s$ M \$ I矩阵式二维码
9 Y$ @8 P# {9 C* ]& \" j: C% Z9 S3 o9 P( f- q5 `8 ~4 w4 c1 L
二维码的优缺点 l; e/ F. s1 s5 ], D
优点+ B) u( n, N: }4 l# ]
信息容量大
, [ }5 F' R# Y7 d. ]$ v. w4 d/ E- @& F2 V% K
编码范围广
% _. \" n5 o! g k
, s& @# g5 V: ^' _% ^: q容错能力强/ a8 ^( ?& P& r$ e& E# \4 }
% {5 f' J5 M2 N
译码可靠性高0 B( O* `6 M" O/ l8 e3 f
9 K6 D* W! t' U
可引入加密措施
7 p( w- u) B) z1 s N! _2 B- C: A' I: I( M- k! l9 r9 S) w
成本低,易制作
3 D; ^- z; Y, }
7 ]. S" D ?' w% R) g7 s缺点0 f5 b# W" ~: P! T6 `( C
二维码技术成为手机病毒、钓鱼网站传播的新渠道
# E* m& g; ` |/ N3 l$ I* c7 k! q$ p
信息泄密
s! z" n6 v) D
' ~" P0 Y% U a目前流行的三大国际标准
4 M. Y* R; ?- c! T* @; Z: zPDF417:不支持中文% k3 |8 H& w4 [, I% {8 L
+ @ y! Q) d2 l+ ]7 nDM:专利未公开,需支付专利费用
/ n: L/ n' x3 T2 W# M# c: V8 y" z# L( I. V
QR CODE:专利公开,支持中文
6 L1 G) u5 `+ h2 _
% D& I. b. b. n& YQR CODE 纠错能力
. `" d5 x8 r! |+ B1 q$ qL级:约可纠错7%的数据码字2 y/ ]6 V3 b3 S* z( N$ U" ]% f9 L9 H
) V! n0 ^# h6 IM级:约可纠错15%的数据码字7 T( b5 R4 L" ~5 ?! U0 v, U! W
) n3 n( T' |2 ?! L3 e7 g4 TQ级:约可纠错25%的数据码字
% g4 ~1 u& ]; f. A+ \8 q% T/ q$ Z9 _5 R
H级:约可纠错30%的数据码字& Z: T9 P0 W- F, @9 z! Q9 A
) v, c. o5 p( H3 A5 _前提条件
5 u. \. i+ f4 QGD库% t2 n2 h5 U, H( l9 r
% P7 W, y7 C' H6 ]: e一、PHP生成QR CODE
$ a* d3 ~7 ^; e0 o* Y0 C5 H6 ]官网:http://phpqrcode.sourceforge.net/
$ ~5 p8 @( k6 U' e: R* |6 H0 U$ u3 e( x- }1 r
下载源码:https://github.com/endroid/qr-code
6 m% G8 z: j+ |) n8 `5 h% D* s' v0 c/ H* U( X
目录结构, J) h& g) c! t A& f
& z$ a3 g! j& H) A5 x+ R6 l2 p5 e7 Y) _6 P
1、qrcode_create.php
& {+ o' Y" L* l. d" u- q% yps:生成普通二维码
1 v3 V% Z7 J+ O/ H& i Q; z) |# `: C/ ^- % O: e9 J* Z2 l& i/ n
- include_once "./qrcode/phpqrcode.php";/**" C3 J% P1 _& P$ Z# T! b9 Y
- ' S1 ^) V2 ?' Z6 l+ r2 W
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径
% K. A* [6 P7 \$ Z% _
& y5 F# {8 q ~$ s' X9 m- * 在浏览器上直接生成一个二维码(内容为abc) ^9 t/ H+ \( w( B+ D
" N# b# G" s8 U1 L9 {7 }) ^- */QRcode::png("abc");3 ~" F) o8 Y7 H7 P' u
. o+ V0 l! d) ^* [6 H" e6 S: `- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**
% ` u; G$ @/ o$ l4 t& i
8 e$ b; O6 M3 b; `# C* L2 k, T- * 生成文件到本地) o! G, N2 @- {0 x% U z- H
- / g" F j4 V( R1 q9 S
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)
! u; z0 B& A1 ~% H - . \: k3 v0 s C" s3 d9 v
- * PS:$saveandprint源码的p6参数做了修改" R7 ]% f( s$ V7 ]5 c Z
- 0 T) j0 v2 l* I% T2 U0 `2 z
- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);
" Y0 p- w* W3 _# F) v- V9 T
5 a1 l# p* t/ S
9 `# J: I/ n W$ N; U: n8 ^
复制代码 3 o+ N' `# o1 \5 w* P
2、qrcode_logo.php$ k( j% S2 q `( m3 ]
ps:生成带Logo的二维码
3 d$ f+ B% N# k7 o' ~& m- /**% [) y+ |1 K+ V9 w9 J; G" ^: h
+ I# X5 n# Q- H/ ?- * Created by PhpStorm.
6 b& |) X2 [' n8 G
: m& o* {2 d4 _( q* M! B" X- * User: user; s6 z, v/ v. `9 l. x1 q& \1 g
- 5 M8 Y1 k3 f1 [; [7 g
- * Date: 2018/8/16
$ t# Z6 F8 q3 s/ ]
: S/ S: [2 [9 j4 u- * Time: 10:43( I, u! M, W/ W# F
- 2 N; E" C' A0 G8 N: @; T1 r( X
- */include "./qrcode/phpqrcode.php";$txt = "测试内容"; t" l% E2 @3 L3 b* c
- 2 G0 R1 I# V* P) q
- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称
' b# E' |$ S& H2 D5 e - ) _8 r/ d8 D6 h9 \9 m* B$ z; B5 I4 P
- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是, ], i. m7 @7 R7 q' N
3 X* h" G5 F' H- $margin = 2;//边距
& _$ M! T* {/ K, K2 r; g
8 k9 V5 K, e/ F2 @. R. w- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片% y$ f$ r# M8 F! X+ S; W6 ^
- ) t, Z) m% q3 K2 z j( d b- T
- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){
1 K1 r! P4 c; {! L8 T
+ D# Q s) [; d9 W y- $QR = $picPathAndName; //已经生成的原始二维码图
2 h8 Q" {( L9 P7 X; U" r; A - " j, x1 U0 N0 R7 `% R
- $Logo = './pic/logo.png';
* q' D% t! }! `( |
. ?7 N( A5 m0 t H- $Logo_re = './pic/test_logo.png'; $ i0 _6 ^6 o4 R* F: Y
5 ]4 Z, `. K& @: k2 z: D0 b5 _# {- $QR = imagecreatefromstring(file_get_contents($QR)); + D) H3 U# K3 M, l0 v! k' s
L" c; y3 | {1 G- e8 W+ p- $Logo = imagecreatefromstring(file_get_contents($Logo)); 4 v+ ^4 V+ l% D7 q" Y8 {3 @& w
0 b' y: b9 s- }- $QR_width = imagesx($QR); //二维码图片宽度
) {7 y, S6 D9 P/ l - * o, z$ q8 p$ \: {! l
- $QR_height = imagesy($QR); //二维码图片高度
# q6 B+ x; Q) t6 e2 J+ ?0 Q9 }
' d" ?* B R0 Z; x- $logo_width = imagesx($Logo); //logo图片宽度
/ T- `0 ^6 i* ]2 n' f
7 P* k& X5 _+ Q' q4 ~5 Z' i- $logo_height = imagesy($Logo); //logo图片高度8 B; N1 m" z9 H8 `
- ) E' D/ A& i4 p) n& X% ?7 n8 r
- $logo_qr_width = $QR_width / 5;
& M6 w: W1 c& L$ `' I - c; a2 D1 r* r+ I! A& h
- $scale = $logo_width / $logo_qr_width; ! r6 c$ e& Y8 {8 \9 z, e2 M O9 @
) B1 R: a3 o" e# j) p4 U& M( R4 R- $logo_qr_height = $logo_height / $scale;
# c# o' {$ ]* c4 M
$ ^8 h7 u1 i* {7 O+ L" q- $from_width = ($QR_width - $logo_qr_width) / 2;3 [* n$ E6 @5 a) Q
- % B6 C: q1 u) W5 |
- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
% A4 v/ y2 y [ - ; G' T, p/ o5 o
- //输出图片8 S4 v8 r4 r: {7 |
4 n" D4 C; Z2 w- ~6 L& ?- imagepng($QR, $Logo_re);
5 u) ]% J; j- M0 o9 x
% |) U; L2 M0 U- A- }
, r: ^1 T0 [3 q' R# s
# a8 I( h7 a$ }$ e/ C- 5 Z/ d7 {, [4 q
复制代码 3、qrcode_vcard.php (生成电子签名)3 T; D5 R8 f0 f( J" ]# i3 }
' e/ V! s) _- h, m3 F
vCard格式:https://zh.wikipedia.org/wiki/VCard( L+ z- P, z* [6 w g% h h
, T y% j+ q5 M9 |. P6 V# w3 q- ! @# o5 G. O& l' J
- * Created by PhpStorm.+ N4 Y6 K9 T$ ] ^7 S
- 9 K; d6 I# F3 G/ E& r
- * User: user
+ |& Q3 {/ m S V3 I0 i - 4 q: o3 Y& Q+ Y' W0 ?8 c
- * Date: 2018/8/15
8 F! L* x# I0 e; P- F4 x3 i1 v6 g
+ h5 D T- R( M, E7 K' ~# a- * Time: 23:00
5 `* }2 m* [2 j1 @
8 R1 |2 z7 C* U. Q) Y- */require_once "./qrcode/phpqrcode.php";/**
/ X- z, e( w- e' }
( S- t" F+ w# a( q4 N. e9 a" I- * 生成电子签名
$ u2 [/ J3 W3 C
: w4 |- F) m1 Q+ Q- * PS;使用微信扫描二维码
+ u4 d& Z* i$ f! o* A
$ u6 z- z+ r6 x4 E$ A- */$content = 'BEGIN:VCARD' . "\n";//起始标志1 i) i( y/ m; t: L3 }0 {
- % ~* H/ F' y1 d# N
- $content .= 'VERSION:2.1' . "\n";//当前版本
# s9 ]+ z5 w# M7 z8 T6 v I" s6 r - + c# \ v3 b# @1 L" j
- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名
/ m3 y( @: S5 y7 V0 C% b - 4 k- i$ J- v5 T* p+ b
- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称1 b$ {: O, E5 ~) a
- " R/ N, I' s5 }5 B! B$ f. [6 a& F
- $content .= 'TITLE:PHP研发程序员' . "\n";//职位6 M1 U: r7 d: G4 q
- & b3 y& z( \0 r3 Z; J7 \$ S* x
- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话4 B8 o. z) G/ F" t1 ~( r( K
- 0 f" i$ W9 k# t
- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址
1 c @' e" \$ R( q# T" a - " l' u$ G" J5 F' c. t9 }2 F
- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)
1 _* c# b+ D: J) O# S0 B, _
! Q/ G. @2 f: T- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话
O& x6 T! R9 E" [" [# B7 J8 } - 1 {7 i1 V7 |) K
- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱0 g2 o3 w' u- D4 s
- 1 u' X4 h: I8 C# t: N
- $content .= 'URL:www.baidu.com' . "\n";//个人主页4 S: t, H N2 K9 [1 W, ?
9 b, {7 ^0 g7 s0 g5 d- $content .= 'END:VCARD' . "\n";//结束标志
3 R6 |1 h; R e
# R: q/ V, D2 V" |2 U: H- QRcode::png($content);1 @" _& O3 l& g" S% f7 v A9 V
- 5 v8 h" x& a- ~. C( N8 t7 f# c6 Y
3 {& m7 J' m; w, q. R/ |8 `& [
复制代码 ! F3 j7 }% ]9 G- b6 K3 R+ R: ?" T K6 f3 t
相关文章推荐:
# O4 r, l0 Y( Z4 r; [1.PHP生成微信二维码实例
7 b v' D6 P' ^0 M2.php网址转换生成二维码
2 X: Z; {4 ?2 C相关视频推荐:
% _+ X, t( Y" H8 y7 Z7 Z1.独孤九贱(4)_PHP视频教程* {" g$ ^, t; o3 T. p$ ~$ k+ G
二、JQUERY生成QR CODE/ d) x/ a' }$ k+ ^! ^) Q
源码地址:https://github.com/jeromeetienne/jquery-qrcode' D( X& _! e' L5 |& r: n/ o7 U
/ x+ U1 d3 D/ E( |8 \
jquery_create.php
" _( \' L% r" }* {# j2 C; h1 M- P2 N# A0 Z, v9 F( [& t( g8 E+ r" d
- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码 7 w5 x3 L ^+ j# n( \
三、PHP识别二维码
" c' Z2 g; k5 H) J% K k1、方法一
+ q; i$ R% s q# e. k0 e环境需求,安装如下扩展( V7 @$ [- K' a' t
- ImageMagick
: S4 p, `3 \, P% F* k9 }' r# }- zbar: e* V0 F S1 ^; g% o& y! S+ t) s
- php-zbarcode
1 a) W( R) |6 n% H; I, v
0 [5 l6 Z. n1 ^+ f7 d9 M3 @2、方法二
7 _( e0 {" j1 ?* W' IPHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以
* y) @! O( @: K( M9 D2 aqrReader类:https://github.com/baagee/php_QrReader8 R/ W" P# w9 J) P
. n3 u- A& p( F7 C
3 V2 F% Z9 H( g, q& T- $qrcode = new QrReader('./test_logo.png'); //图片路径9 V3 X+ k' ?, a+ Z/ g$ W# ~
- 8 |& W4 Y- a6 l3 {7 v+ t8 u) q& m
- $text = $qrcode->text(); //返回识别后的文本6 Q; D4 B# e, U0 g0 e7 V. b% n$ q
1 t7 \- g" E3 ]) N9 E- echo $text;0 P6 ]2 F; M- {) N; m+ i/ E2 s& G
5 G8 i: X; ?, x7 v, l5 D
- r# K4 Q3 J; v3 C" a8 k
复制代码
% \5 B V/ p* c3 s链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y74 ?: [5 c5 j3 ^( w* Y6 _& z7 ^, @6 K
3 v; K* G" t. E6 K- \2 E
. Q9 }, g: ]' R: p) y% F% Y: K. u
0 {7 q" W3 Y! P3 ]+ @+ S( g4 T& d. j
! u3 a+ @/ y" ~# L4 m$ H
% `8 O3 A- U2 B+ O+ N# |$ ^# _7 \8 {$ T- t) t) ]6 O) M6 r
5 o; R5 Y7 _; L( u4 V
- F1 |4 B) r- r# h- \- @4 j6 P, ]+ p; \ l4 u8 j4 L( P) o4 I) B+ i8 y
|
|