管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。- h2 H1 i& r4 i$ h7 A" `
---------------------------------------------------------------------------------------------------
* s4 E. N9 v* t7 i二维码的分类 D3 `# v6 o6 [1 l: \* E" ]
线性堆叠式二维码1 w! n5 i! E+ ?% f* R+ c# S( A" p
" r- A- y& J9 ~8 l- X
矩阵式二维码
4 q* E1 W# L# }8 u" V0 G
4 o! g4 t6 Y3 B' U; _7 K! O二维码的优缺点$ r% D) ] d) j7 O
优点+ ~7 N, m: X9 \
信息容量大0 R4 \* ]8 c1 h( m7 O1 l& T- E
. H$ u, |7 m% l; f' z( n8 O+ K2 J% d编码范围广
. P6 w4 w; Q$ G+ C
" M" \( p3 l2 b. M$ W容错能力强: X" X; o* x" J! U+ q6 F
2 g6 i8 w' P3 w; B译码可靠性高
* O. ?$ ?" {$ O) t& k: X. a; v( z& Y* e
可引入加密措施
6 L/ t7 v3 H1 l* ~9 t: B( i% F% z0 A
成本低,易制作1 L* Z* a2 S0 k5 m, b
) q( H: h+ e+ C9 l$ v
缺点5 W- a! ^* L) z' ^! k3 @
二维码技术成为手机病毒、钓鱼网站传播的新渠道
1 D& w( B/ ^. b4 J0 |5 q
- b A! E2 J. f信息泄密5 E/ T) P1 R7 ^( d1 d
% R O; |0 l1 q9 d- ?! Y
目前流行的三大国际标准
' o' q4 Y# H+ }PDF417:不支持中文# \+ a! b1 s5 K- B0 ?( g2 b9 k/ D
( |# Q% M2 e# X- J) d5 b/ hDM:专利未公开,需支付专利费用
. L/ Y1 d9 U% n3 s6 e
. O- N6 X, p' G( o* ?; ]7 [QR CODE:专利公开,支持中文6 V& m' W8 \+ l
+ c! d: a3 w& iQR CODE 纠错能力. q/ f8 l$ q6 l" U' u( z7 }8 y
L级:约可纠错7%的数据码字$ A# i, P; h) {5 u' T& J
. d9 |3 o! U4 U5 \3 _; B0 c, `M级:约可纠错15%的数据码字2 ?# X$ e1 q4 { ^+ ?
, M$ ?4 J' N. E# D0 xQ级:约可纠错25%的数据码字3 O4 w) P9 m& j
6 p3 q6 k' D/ e% s4 J. t2 NH级:约可纠错30%的数据码字- |( D8 G" m: S! q. \
9 B3 q) X# {7 r+ }
前提条件0 y" H+ u+ H" S6 B. u! n; K
GD库
" K% T& p3 w+ I5 Q& N- J+ ^4 v8 z3 R8 c# J- X. \' M
一、PHP生成QR CODE8 r' K, ^# ^7 _ Q' E+ @
官网:http://phpqrcode.sourceforge.net/4 `) | r- n( w, y, q
* f/ k, t# C" w+ X. N8 s下载源码:https://github.com/endroid/qr-code
' z; I B/ b( C3 s' t
/ I% ^# j+ ^8 u+ }5 ^目录结构
* K8 k& g1 G S) d; A
" w* Y' I( [& a" N( q' [$ \
- s- M; x& o C; g$ O; {1、qrcode_create.php9 F: x* |, f d) x
ps:生成普通二维码
$ ]. x: |- F# R# m1 [; `- 5 }" ]2 {" m" m; b+ d# Q
- include_once "./qrcode/phpqrcode.php";/**7 ^( ^0 Y/ \- G" S$ {% I7 y, q( D4 `
- $ k; f1 z1 j% s( B
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径5 A8 r( q7 i' T, `2 B& x
- 6 M9 L. f4 k1 j( Y3 q. x) c
- * 在浏览器上直接生成一个二维码(内容为abc)
/ U* {3 Z. G6 d - 6 W) M1 f4 `( u5 U7 R1 J
- */QRcode::png("abc");' Z8 w- n: Q2 [* A: v. b
6 I- V1 K: S/ ?5 D' [" l3 v0 z- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/** ^9 Y9 X- z% k6 T1 }
, V" y; z9 T! v4 `- * 生成文件到本地; g& B' n8 ~# X1 f3 \' ?/ D
6 \. E: B" X- M! a7 @' P- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)
2 t; u0 U( s* p
2 S; W0 h$ r/ {8 `+ h- * PS:$saveandprint源码的p6参数做了修改/ I# [0 |* T Q1 b. H* {5 ?' r
& i# x( U4 P! t- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);
- J" x; ^5 R7 Z2 B
+ |* V1 h2 H% S+ j) j" C- ' \. f) w! D+ q6 i
复制代码
8 u8 G" J) G m2、qrcode_logo.php
- z4 C- I" x1 P5 ?) [ps:生成带Logo的二维码- 3 w6 L+ Q9 N6 ^. l* e
- /**; B; n/ ]5 _* d/ e5 f
2 Q. K0 l" A+ ?# v( v- * Created by PhpStorm.3 U( `0 k( E' z) l& y$ w4 e& \
- % l. `4 a( d0 g" q, J; W2 y
- * User: user
9 N: j: S4 G$ v5 Q, }0 P/ Q) d1 }( j - " l& s8 L; C. i0 b
- * Date: 2018/8/16
# R5 i7 r& U- S0 f; S6 {( l5 j - 8 R# f+ a) z" }* U: {
- * Time: 10:43
7 i1 j; t" M( _ - 7 k9 w5 L" E# C9 Y# d. n8 F
- */include "./qrcode/phpqrcode.php";$txt = "测试内容";4 y7 u5 k+ t; L
' ?, u, s; B# ^- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称; `# O8 l x) T& ~
- . P- H7 \' P2 F: N
- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是) G! O0 n( x6 D9 _$ D
- . {# h7 l0 z3 p. X
- $margin = 2;//边距, G, k9 t* Q2 W" F
- & E) C: `) M" |/ e- J2 V
- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片; u4 _* C) F' O
3 h: G! @9 y+ k- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){ 3 I4 B* R+ B' `1 n2 _1 ]
- . C: x. x+ ?: a; ?6 K& i# c8 G
- $QR = $picPathAndName; //已经生成的原始二维码图
% g5 p) d$ ]& K
; f! Y* L+ f/ @! |- $Logo = './pic/logo.png'; ' n. D5 Q: c$ Z Z1 ?' i4 w
. m% W9 V8 ~9 ~" U1 `( {' I- $Logo_re = './pic/test_logo.png';
3 r7 M) Y" e2 g8 {5 s - , o: y& @! G6 U) a+ C! t) I; g; v
- $QR = imagecreatefromstring(file_get_contents($QR));
8 z/ v* r, `- O" G4 @3 l - $ ^$ F. H" T+ k# h) U
- $Logo = imagecreatefromstring(file_get_contents($Logo));
" a2 |; \7 Z; z) T/ L
( F' j: M- z, d+ v' k- $QR_width = imagesx($QR); //二维码图片宽度
% S9 N- L/ M- d5 P$ g) ? - + |7 c, U+ F T2 B9 d
- $QR_height = imagesy($QR); //二维码图片高度9 H8 X( a0 N8 |& T
( {, G% b3 b- n0 N- e- $logo_width = imagesx($Logo); //logo图片宽度
1 o, D! B; j, A- F" d+ D
/ W: ^* \& h1 N0 U" L- $logo_height = imagesy($Logo); //logo图片高度
) \- x) O: ]: a( J - " G; U: z' G- ?0 S0 @
- $logo_qr_width = $QR_width / 5;
# v9 p3 a6 A, _! v1 S6 E
& M- B5 `5 u5 a0 q- $scale = $logo_width / $logo_qr_width;
, T9 ` b) g) ?
4 s8 y \# J" w4 g3 n4 _- $logo_qr_height = $logo_height / $scale;
6 K8 W. z( S2 d+ D3 n3 n - : B( }6 l( _' v' J# e
- $from_width = ($QR_width - $logo_qr_width) / 2;
% p9 q$ _1 m, i0 {5 _& b- I- B6 J - 0 u+ ^6 N- e. v; F
- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
, Q% F/ p5 O- I' S# o
( m! u* \1 y; y( `- //输出图片, I0 X' y. w4 P0 ?4 h9 C, {7 f) G
- 1 w6 a' c B) {1 @# L
- imagepng($QR, $Logo_re); m8 N+ N2 k' g/ J* f0 L9 r
( n) Z5 @ Z3 T- }
' s) u$ ?0 }- K# j. \ - 4 m, p C2 [. L! ?
- 0 ?% S$ G/ E. P# } `( R) b% J9 Y2 s
复制代码 3、qrcode_vcard.php (生成电子签名)( x4 z" S3 Y% w- Y
) ~7 _8 ], x/ e9 I. C* M
vCard格式:https://zh.wikipedia.org/wiki/VCard- J7 W; H8 R! {* ~& ]( x
* [6 a% R- m! o5 w/ z7 b( p3 B* o
- 5 a' R/ ~8 b* V3 f
- * Created by PhpStorm.
! e& `4 U$ ~) D1 c' Z$ s
" B4 _% h& j5 F. v$ F- * User: user& w: _8 Z+ a/ G( V# o/ X
: {: t K+ P; `7 p8 N- * Date: 2018/8/15( p, C4 G# }/ M2 @
- E. k' x6 ?8 `1 u% @
- * Time: 23:00
% o) d- T1 q9 @$ H3 R& a
6 w6 T4 e: N1 h- f( w3 j0 a" l- */require_once "./qrcode/phpqrcode.php";/**
8 `9 v2 g( q* \# L, K. ` - # `0 z- n) b1 R6 h
- * 生成电子签名
O0 a% w }2 k9 @0 S& N - 0 R" T5 Y* B8 E: D
- * PS;使用微信扫描二维码
' \3 r4 v& h. V- E0 j) V( g - ; s V$ o$ m7 B& C& n
- */$content = 'BEGIN:VCARD' . "\n";//起始标志
5 g, D% T3 d, Q0 _1 n+ g0 {
: E5 n' o, J8 n; p- $content .= 'VERSION:2.1' . "\n";//当前版本2 P8 `% t1 `9 V7 @* O( o
7 i1 q# o! r0 E& {# h8 p3 F- E- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名' E! L% k- v3 A
/ W- y# O' p( d; |- |- x4 s, \- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称, b. c' z3 ~# z- k* ^
- 1 S* C6 {9 g& N2 a: E- h
- $content .= 'TITLE:PHP研发程序员' . "\n";//职位
# T: f" s5 U* ~! p
) d- Z. S9 G8 P* W) l6 p- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话
& V8 K; Z, C: t- t7 o/ m
2 ~( [0 L( ^# H- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址
% y! I% s' `/ [; V5 X8 e
: Q/ |+ k' m7 t- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)
. P9 Z* p+ d6 Q# J
2 M: R# e) T. ]% S" i e+ Y7 Q! A0 g- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话, A/ m8 U9 ~9 C# t3 p( B, z& B
( a- ]) [: m% S5 m$ M# W- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱7 e' o) H% Y* q6 K2 N+ ]$ k
- 2 G- _ M2 m, J6 Y- z# D0 q
- $content .= 'URL:www.baidu.com' . "\n";//个人主页
3 U! W5 ]3 G) T4 D) I0 O3 k1 t! |
& M6 G' Q: J! W. ]3 _- $content .= 'END:VCARD' . "\n";//结束标志
7 _1 p0 g8 P# C& N, M
( y' X( h& y R- d: k# K/ P \! b- QRcode::png($content); g. @; Q7 H! D' L% T& C
- , q6 e( _. i6 s
; q# D; ]8 P( U P7 y0 Z9 d: n
复制代码 ; o6 i8 `! W, B0 j. g5 j
相关文章推荐:
/ F- c" \& z7 {3 N1.PHP生成微信二维码实例: I% E6 U& z( Q1 `
2.php网址转换生成二维码
$ R3 W! J9 B U+ k* C8 O5 c相关视频推荐:
1 a( R6 O- @: \5 U# o1.独孤九贱(4)_PHP视频教程
1 l% ?6 v. K, F- r二、JQUERY生成QR CODE
5 a# H+ W/ n" ~, `$ O% s源码地址:https://github.com/jeromeetienne/jquery-qrcode& L& q! q% f8 w2 I9 i
% W! o2 m- {" c9 e1 r
jquery_create.php4 K0 x. s* C7 a s6 S8 T; b2 H+ Z3 r# I
( P! |4 h; O! W$ X& ]6 A M
- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码
* q1 P9 z2 H/ P1 J) l+ H. m& {% m三、PHP识别二维码! E" }6 K, T# v8 F# e3 r& F/ H
1、方法一
6 l5 g7 [5 `4 t5 y) N# H环境需求,安装如下扩展0 j9 R" B" l$ e4 W! ]$ T4 I
- ImageMagick
* i& Q" w, y2 H4 o3 p5 |$ M# @- zbar8 K, _( [# d$ [$ r0 p* O$ c5 z- n
- php-zbarcode
) G; S5 C" |. q/ O7 q+ W; m% {5 m3 A) ?& K9 G4 q p* _* U
2、方法二2 N8 p6 | V+ D; [5 \
PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以- t8 b; D# E4 v$ y v i( r9 g. ~
qrReader类:https://github.com/baagee/php_QrReader
$ w. R4 `+ c, h. h* B/ ^% W1 l& l: o( w) _% E: O
- 4 P9 U3 v% X: m) U/ \5 N$ x
- $qrcode = new QrReader('./test_logo.png'); //图片路径
& ~- i4 l; n: |+ R6 N" U6 c& z: I - 3 d) m5 g- P" p
- $text = $qrcode->text(); //返回识别后的文本
( \8 c5 v! T7 T
* ^# f% ?0 j: F. D: v4 v3 F- echo $text;
+ F. n8 U6 T: V+ V' _$ Q6 C, T! h$ w - 5 z( |+ b( `# F- b
. j3 G4 G* {7 X/ T; Q, D
复制代码
' k& a! h- a `# \ C( @* _链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7' R- f6 v+ E. X' Q
4 Y9 ?1 N" Z' s% r! y/ D
}1 P: L9 b# I/ p* Q# l$ a
+ e+ {; m$ |5 d$ `
# m5 c+ L+ T7 [9 I5 r2 u0 `0 i& `7 z, X. u: ~' K* e8 Z
' C% t9 _ `/ Q) l! g
T$ v/ Q- {5 \8 F; ~2 Z+ X5 \' ^! w) g/ Z H
8 f- u+ r: H. d" u0 d( H
|
|