管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
5 }, ~9 q- O% o---------------------------------------------------------------------------------------------------
; c2 F6 Z& w5 L; P8 E) _二维码的分类! f$ c A2 C }3 P! Z
线性堆叠式二维码& s0 W7 t6 ~3 {( z& n
* i9 k q( U( b% i- {, i+ K c
矩阵式二维码3 R0 E+ ^/ O" ?9 w' e8 i
+ E* `- S# D0 ~: D- Y
二维码的优缺点
' I+ P: X' C& I* h优点) m" U* J, z) V% c; x5 n: i2 F! c
信息容量大0 U" ~+ u# ?, U
. F" D; f* ]2 w编码范围广( R/ O9 ~! P2 q5 H4 M
8 F U, v8 g, b+ ^, s3 y6 [容错能力强$ U5 Z3 D2 B0 Y0 Y0 R
# p) B& [% v% [- P( E: H0 N
译码可靠性高
) z. E7 R; t) ]! h
. s# K$ `2 n- C r5 q/ h可引入加密措施
) J9 N+ q4 `* N7 R3 v+ z5 f4 _4 D1 `& n, J0 e
成本低,易制作! f" f+ l& h i2 U% I4 V
5 ?0 V8 I; F, f8 x2 ?$ @( a2 f
缺点# |: y4 I# O8 L; d+ E% _5 [6 D
二维码技术成为手机病毒、钓鱼网站传播的新渠道
/ Q& f* l q) S4 j) j$ C) `0 I+ J, j5 ^$ O
信息泄密
7 t# N* y7 m5 D# u( ]$ l( L& t' M6 M" Y5 m! T6 W% A8 i
目前流行的三大国际标准 a. N; ], s5 P
PDF417:不支持中文 s! j* y' x6 d) {) G7 ]
8 x7 j5 M+ G: e6 u. N
DM:专利未公开,需支付专利费用
0 Z3 s& ~, u5 y p3 A& T1 ~4 S2 s5 q: o# W/ T$ h1 u3 H+ C* e
QR CODE:专利公开,支持中文1 C* T: Q+ z5 i' F4 R7 X& A9 Z6 Z
* B& b: {9 W! h2 E/ _ K3 g0 dQR CODE 纠错能力
0 C; o' Y5 z8 p/ OL级:约可纠错7%的数据码字% l/ W0 B& H+ O4 {
; b$ H0 i! G. ~# z+ f) ?0 [M级:约可纠错15%的数据码字1 }' ?2 [3 M4 [- K9 O# ?+ f
( s8 C b+ M+ u5 u0 Z( n- MQ级:约可纠错25%的数据码字
5 Z% V1 y* F! a1 d, l1 o& Z8 Y4 k' A0 i5 \6 J, B
H级:约可纠错30%的数据码字4 z; `+ w. X0 o- H, `% N$ R: f! i, z
& h) _* R N) `8 r! l; c; t+ t
前提条件0 c* L: O: w$ l7 W4 x
GD库) R2 @) E4 u. D+ j
# @: o+ B$ p4 A+ b, \$ S0 j6 c0 P( M
一、PHP生成QR CODE
% W5 ~5 E2 H7 z: h, f8 Y7 C+ G# @官网:http://phpqrcode.sourceforge.net/
; T0 ~' Q% v2 z* \9 Z, r" R
X' ~5 c$ l) E4 @9 T3 K* I9 ~下载源码:https://github.com/endroid/qr-code$ C! i" n% r' ~6 M# [4 e: j& E) j
! o, x* N; K- f. @
目录结构8 @6 h: c7 I+ m5 S3 b% N4 I& Q- n
! \ }9 ~% @4 f! O; d6 K
) x2 J$ j$ e. A
1、qrcode_create.php
/ N( |* O& k8 v0 [9 P5 Kps:生成普通二维码# ?0 Q; O/ s9 j6 ?4 v$ C
- 1 i$ A1 |1 ]# e- n* h
- include_once "./qrcode/phpqrcode.php";/**" V6 b3 h) [- c4 q2 N" L* H+ w
6 S. l$ m- k8 r' H) j2 \+ n- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径! A' [" Y- C3 v6 r1 I
7 [% s5 O5 [+ {6 T5 M4 s- * 在浏览器上直接生成一个二维码(内容为abc) V% c2 H; j3 l7 q3 ]% ~) }( ?# j5 j
- / ^" Y, |) Z/ u# p
- */QRcode::png("abc");. ^( r7 B7 [$ Z
8 A4 s8 n- S7 I7 q2 w- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**
% \: A% O8 F) p( H" {* P! O - 3 v" ], F% v* c( v) m
- * 生成文件到本地
* X: j! \% }$ v" t - , t& I! p6 ^; G- }" h; c3 s% w0 ]
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)8 J8 ?: I) o& d2 F
# n4 @7 x; i) @7 C: t% N( W- * PS:$saveandprint源码的p6参数做了修改
: l- J+ Q: Q/ z8 J - , C7 N; _1 M8 A4 K* I/ \
- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);
4 U d7 p* v; V; z* [/ n7 g! y8 P, D
6 T( C0 u9 }" L: g, |+ c. t) I- R% q/ }: i' F" Q3 p- w
复制代码 * m; c2 `/ N$ ?5 c5 {* Z+ \7 R
2、qrcode_logo.php
- \5 Q" _; H- m6 R8 b( Ops:生成带Logo的二维码- 1 [* |5 }) A5 \5 [
- /**
[" o" H& n# I8 Z" j - : [/ v" Q* ~) R$ S
- * Created by PhpStorm.% A- V! `& g2 C* q
7 |% U; T9 e2 S8 j r* V" e- * User: user) {. U' J. z2 T, P j' c) o) o
- * J: `& W0 S: F9 j" x
- * Date: 2018/8/16
6 ^7 _5 u1 }" k! l% P. W
! W* }( ~8 r/ T: O% @- * Time: 10:43
' p3 _5 k5 ]- [8 q6 N6 b - 9 \ w7 m7 V$ i- W
- */include "./qrcode/phpqrcode.php";$txt = "测试内容";
( s o& h: _- {5 ^0 \8 s
' N( Q% C9 ^( f8 _% U1 T4 U- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称/ c( E, K. R! I0 U1 L
- $ k4 R9 R& {% r5 Q) U
- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是; Q8 c# }4 M M3 r$ [9 d1 @
- , a7 A1 G/ X/ \/ [, [6 E( ]
- $margin = 2;//边距
1 C3 |5 D( A" M) N T6 S' q6 L3 E
! E# g9 D1 V- r) B( g: j4 n- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片
: ~4 v: r* B2 L( Z+ g/ e - % w1 Z& J, Y7 M: |1 B; J3 {. `8 L
- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){
7 L2 S1 c3 ~% e/ C( E
8 g/ s, h7 E. [# j- $QR = $picPathAndName; //已经生成的原始二维码图
! `* m: ]7 _* g# W - 9 F7 u5 _! {) N0 y
- $Logo = './pic/logo.png';
4 s( U, c- A' g1 a - 8 Q& [# d1 [* s3 n* h6 Z! r
- $Logo_re = './pic/test_logo.png';
- T0 i; |. [6 n" o/ m" b - : H& o" a5 ^- P8 r
- $QR = imagecreatefromstring(file_get_contents($QR)); 0 O8 f* p0 Z/ K1 D! L9 s
8 o# t8 i( i3 e( G" t- $Logo = imagecreatefromstring(file_get_contents($Logo)); 1 l( t* i5 F' Y: x+ I# p4 c# _) Q
j$ U( Z4 W# C5 U- $QR_width = imagesx($QR); //二维码图片宽度
3 [. @4 X: M' j* J( ^& U& O0 U: M8 E - 7 b1 n/ s, V/ O7 f* P4 i1 A6 U
- $QR_height = imagesy($QR); //二维码图片高度+ O* o4 Z' k' ?( u% _
- J7 `- d, R7 K9 m' N$ x, n0 y- $logo_width = imagesx($Logo); //logo图片宽度
& ` t1 r. D* F8 Z/ b7 X
! I/ J9 ] Q3 _1 B- $logo_height = imagesy($Logo); //logo图片高度
) V* Y/ R* H5 p; _& ]
. B' F/ c5 U4 ~- $logo_qr_width = $QR_width / 5;
) u1 a, I/ X( v9 x) Z; V - 1 e2 E: _! Z$ D: s
- $scale = $logo_width / $logo_qr_width;
2 H+ H0 [# L* Z/ |0 e: B - " F' r0 j7 {8 [7 I* Z c
- $logo_qr_height = $logo_height / $scale;
7 S6 Y$ L$ j: |9 d
x$ k5 I6 k; E8 \* {8 b; a, l; _& p2 u0 ]- $from_width = ($QR_width - $logo_qr_width) / 2;
8 t( v$ s* J P" I* K7 Z4 | - ; c" e$ F( v! m g) g% Q3 Q
- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height); , K( G8 i$ `& Z2 I' w, y
) J/ d9 u- D7 Y- //输出图片
0 c: M3 P3 X4 p4 E& L9 o, ~+ j/ @, o - " c. {2 y, G+ C% |% ?7 R6 F- @
- imagepng($QR, $Logo_re);
3 \6 }9 F6 p+ ~: q5 g# u) |/ m4 ?. r, P
' @: O* j) U5 R8 ^; G% C- }
/ K; F; w1 @, i3 O3 `4 Q' g - $ q8 S0 U3 J4 ^! G
- + ]# c- u5 ^( J
复制代码 3、qrcode_vcard.php (生成电子签名)
0 x( M6 V+ F7 M: @) U1 ]" l6 h9 y; s; {0 F. O' l y
vCard格式:https://zh.wikipedia.org/wiki/VCard, y# K6 f5 n8 _, d+ h& J6 X
) B7 E& W. F) Y0 W( Q; w2 C
P5 y' P( H- V8 v; b- * Created by PhpStorm.
, M6 Y* _4 T$ a) _- ]) o4 |* q - H1 |3 ?5 t$ a- y
- * User: user+ N( }& V6 ]% L, n
: e% X2 e: _6 g4 Z- * Date: 2018/8/156 u: |; Q' N B5 W4 a5 N
- $ j2 Y* Z' K H8 e5 G4 w; Y6 v
- * Time: 23:00
# i* r7 `' o* n- {" ^3 Y - 1 h6 o+ b' P0 ~9 R6 o
- */require_once "./qrcode/phpqrcode.php";/**3 A1 O+ w$ J$ Y! B+ A
- ]- d1 l- Q t6 ?
- * 生成电子签名
. Q; _9 N1 `/ _: g: Z9 S: I8 J
/ p/ X! O P8 Q" M w- * PS;使用微信扫描二维码- \2 \$ C) P% m) F4 U! g- a
+ g6 H5 X, `% R; o6 |+ J% c. Q- q& x- */$content = 'BEGIN:VCARD' . "\n";//起始标志
$ q% y) z5 V+ v* h: s" w' r" `3 V/ C
' @) w- u; O1 Q+ G" e% s' b3 K- $content .= 'VERSION:2.1' . "\n";//当前版本2 M" a6 r: v+ j+ f
- 7 R& D* R) h, S5 J+ l7 [* j3 a) S
- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名
7 [* z+ D8 \$ A3 K1 b6 F! {
6 u8 G e( ?& {$ @; _' T- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称" W$ |$ s( L! }$ \3 b+ }
0 h5 O$ C* M7 i }- $content .= 'TITLE:PHP研发程序员' . "\n";//职位
3 q- o. L6 K& Q" d, K - 7 ^) c, [9 i& Z% h3 f0 L
- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话2 x2 b7 a, b9 T- N, G+ q/ P' a F
8 e0 [1 P5 p% g! _- ~" [- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址0 t& V$ t8 m0 @' f7 e# T- ^+ R' A
- ' M/ T I; U" p p- J
- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家). k* t- V$ w7 v# s
" g1 H+ }* t! L( L# s- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话
4 t1 W9 z; [" v, h7 r. N0 f5 x
2 C+ _/ l0 `$ s2 l" d: M( x/ Y3 ]- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱* ?3 l" Z! {! q; w
- " f6 r0 r: _4 V# o+ N0 ?/ [
- $content .= 'URL:www.baidu.com' . "\n";//个人主页
0 C5 N6 S H/ Y# Q- u3 D1 e - 7 Y, W. ]2 u9 M
- $content .= 'END:VCARD' . "\n";//结束标志
& T; t. p5 K7 f* C. _ - 8 V# ]# N9 p5 t0 W+ G( b* f; o
- QRcode::png($content);
! V. S; \2 B- g3 E( N/ X
; }" y7 D) Z' ]3 G: e- . u/ V Y8 R- Q2 Q' n( }
复制代码
7 ?. F+ A8 W4 {# L$ y7 n% x; M! p3 y相关文章推荐: Y, X& k4 F- N* V8 |2 m' X+ ]
1.PHP生成微信二维码实例
6 U2 P! E6 B- |8 p L2.php网址转换生成二维码
6 l; F3 Y1 g! v1 Q6 y相关视频推荐:6 {' L7 G$ C& b3 p4 x- j7 E" r/ h
1.独孤九贱(4)_PHP视频教程. A9 i: \ j: V( [. {2 _8 n
二、JQUERY生成QR CODE s6 d. w! y4 R c/ a
源码地址:https://github.com/jeromeetienne/jquery-qrcode
7 Q! m7 U0 w4 ~# H) |5 A8 X' k( o& {- N" P
jquery_create.php
& T9 q- ~# ]. M7 d0 ?; o+ s8 i- E- e, l% e3 \
- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码 0 Z" X8 [& }! d9 T
三、PHP识别二维码
$ J8 |/ w H" o Y q6 R0 d1、方法一
: I( Q3 u1 F# }* d! y环境需求,安装如下扩展
' I' Q% E2 v! c r- ImageMagick
/ B* b; E3 B6 e& J7 g; ^- zbar" }, G9 s" a$ M6 B* [) V$ ], K' G6 q
- php-zbarcode X1 F5 y4 \: H' `! N9 T
! k& _" d" [8 K6 c9 i( l2、方法二+ p/ h9 H) x5 ~
PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以9 Q3 i$ k- L, A1 s, R8 D0 }
qrReader类:https://github.com/baagee/php_QrReader$ |0 O' ^5 L! T C$ H
2 r& k% `0 I2 B2 ?1 z+ W* E
+ s, M& q0 Z* y A+ ^% {/ T1 v* V- $qrcode = new QrReader('./test_logo.png'); //图片路径4 e. @6 F0 I) h3 H) n/ _& p* [5 r
+ T0 |' z9 P6 h. _! x/ u2 ]- $text = $qrcode->text(); //返回识别后的文本
6 ^7 x F$ }9 e+ y- k# n - 5 n+ G p1 X! G L7 u
- echo $text;
0 Z, S |% e8 c+ g" E - & _. C1 G5 M4 M
: s' h2 j$ P6 x: Y4 C$ B
复制代码 3 _+ t- r2 a; N6 O5 \3 B F y
链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7% Z$ _* v$ b7 b# A
' T7 H. j. q8 e1 Q. _) ]
5 G9 b7 D. }/ \# x, c' S/ u+ F" v6 _0 x5 \' Q. h& o' V3 c
) L Q I/ F+ k, z' V2 \
0 z9 G; Q! {/ z, x7 f0 `# G. H) C- ?% B5 b; g2 d7 k
; F- {/ ~0 w" d; f: w
( ^( [6 Y4 i7 d! u' H
4 T, t4 p) J: E" W* w |
|