管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
. I/ x* |) r# x8 p- p1 j- A---------------------------------------------------------------------------------------------------
8 q, t9 e2 N& R二维码的分类
6 _. _4 b8 v3 q0 u8 `线性堆叠式二维码( O, G) G' F9 _% f
( z$ Q# m* n. v7 i5 z
矩阵式二维码! D3 o: F8 H: [0 w# K/ R
l8 n0 |* _# Y! H$ H3 n
二维码的优缺点
1 |. z* ~8 w, F/ ]优点
+ }7 k/ z* t' F. G信息容量大- |4 z! Y% {* {; ]% d
( L* W* j0 P7 p+ O& h2 C& K
编码范围广
' y0 `4 ]6 \7 K) q u% r9 w: H: n2 b$ I' E& L0 h
容错能力强& z, w( x4 k" E* p; K9 ^
1 J: Y: z1 a, ?4 U
译码可靠性高 S5 b( E. e5 K
- O- V. j6 W+ {, w可引入加密措施# @! ?2 j4 Z5 X0 e
, |+ P% M: D3 |% t( d成本低,易制作
1 n6 p$ b$ N! M4 e
! R% j( P3 ?& b' V% ]. P( \缺点+ o# D/ X |8 `! Q4 {7 l0 `( z
二维码技术成为手机病毒、钓鱼网站传播的新渠道' L: M, M7 ~4 R
2 h& |+ `5 D" M( p0 n& k信息泄密
* [7 }7 C, o6 z9 T0 r! q
8 Y1 G+ ? i3 o" G目前流行的三大国际标准! L8 M+ G% ~* ]1 f
PDF417:不支持中文. e8 A3 |8 l4 ~4 c; g5 O& d: s
' v. [6 n# z! d: ?
DM:专利未公开,需支付专利费用
+ C/ Z0 P6 A2 Q" S/ w1 L* z4 K U# C9 W3 t
QR CODE:专利公开,支持中文 g' m: e; Q$ L* t4 V8 R
# q+ p$ w' E" p' t5 e2 v/ Z* VQR CODE 纠错能力* l3 x; Z" p6 v
L级:约可纠错7%的数据码字
) @/ s' j3 @1 h6 W
2 ]& h7 \) i V' N& RM级:约可纠错15%的数据码字
9 U! m* U5 I2 O5 Q/ Y- N
6 u5 R: _8 Q3 D- t+ J: oQ级:约可纠错25%的数据码字: P" [, M4 W* E5 |1 r' Z2 V
) X+ h- Z. p6 i. K' l0 |H级:约可纠错30%的数据码字- b( E1 i1 ?" N2 i$ d+ A; ]3 [
# o/ Y. x$ I3 L5 Y1 U1 V3 m8 [
前提条件, C; q3 ^/ [4 d w9 G) v/ ^0 n
GD库* ^& n5 G. c9 s
! b5 D% A( I, X- u- J+ i一、PHP生成QR CODE
) N9 F. P; Z W7 l' A, H官网:http://phpqrcode.sourceforge.net/
( o* p5 Y7 e$ E( Q+ e$ v2 E3 ^9 g! r O, w! t
下载源码:https://github.com/endroid/qr-code
% S$ y3 g5 C1 Q1 }" W+ `. o/ R/ k7 l- ]/ h2 Y
目录结构
! l( ?, F, s, T- I+ S) h4 l
2 Y( c i' F1 `9 R" r) }9 [/ V
$ l$ v* l+ ^. ^! I2 n9 I1、qrcode_create.php, W# z$ r8 a: p1 h; g! p% w9 P
ps:生成普通二维码 g4 e/ C/ X4 q* d7 R
- Q: ^7 _0 \" b) D j* j- include_once "./qrcode/phpqrcode.php";/**
0 M4 d, Q5 I# ^/ J8 C( B; ~ - 8 \; x2 K- b7 p. F/ g+ } k
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径" N4 y7 q6 x: K5 b
. I/ W3 w O7 u1 `: r. C6 a4 n% q' P- * 在浏览器上直接生成一个二维码(内容为abc)1 V0 g* ]9 N Z: e) {" y( Q
# }0 I2 A! ]2 x- */QRcode::png("abc");
9 M S6 x" Z) A7 \3 M
1 j, Z5 p1 k$ F, }5 H- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**
9 I$ m& Z0 R5 j Q/ a P - $ R! J# m/ j% K9 L
- * 生成文件到本地
9 ?" d% g) [6 d# f% V
4 L# N, N9 y# L- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)& l) K4 l7 U+ Q
- / L- y$ Z: C+ n- k6 \
- * PS:$saveandprint源码的p6参数做了修改# L; [7 ^ I: h
4 ? Y1 E8 M5 I. D, U+ O- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);
! M) ]; G4 y# I+ I; m [
, D4 i. ]: A1 _: H, p; o
" x( f' _7 Z, f# ~7 O( C
复制代码
) _8 K2 S* t$ h$ M, F) s7 e$ f0 D2、qrcode_logo.php& y# j* n- ]! P" b* {5 K6 H
ps:生成带Logo的二维码
6 a( h9 g* M6 X- /** |4 r' e3 x7 x% _6 u3 J d) x9 O7 R( t9 F
- ! ~( ]. L; A" E+ y5 ~
- * Created by PhpStorm.$ T! M" I9 k. G
- , d1 ?( H D4 N
- * User: user" J; E. Z2 q! ^. n3 K+ r0 Q- J
( _& F# G# x/ f' O$ k; l$ T% F J- * Date: 2018/8/164 D7 W0 t) e A1 j5 n' J( ?( K# C
- F' k$ i" ~* h2 A( V4 o; n2 r- * Time: 10:43% r4 [& w# k+ `# @) `1 H4 d6 ]
2 B& x, k( ]1 y7 Q) ^' ?$ f! Q- */include "./qrcode/phpqrcode.php";$txt = "测试内容";
$ h' e/ g( u) N5 v0 R8 r. v* t - 7 c# y) X( b: J* \9 I5 v4 N% k
- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称
2 S: e3 w! F5 o# G6 w - ' o+ O' W5 ~! ?) g5 E; P
- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是
7 k: ^, ^( l! U( ?& Q: I9 H* v - # Q! `& S { U
- $margin = 2;//边距# W# K' Y3 q4 R
- 1 ]- j; m: Y' o3 [) d7 G/ z2 [! t
- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片
( a9 P: v, @5 E* Y( W* \
0 X. ^* Q. S, \) c8 I7 G+ ]9 | U- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){ . Z/ C) `7 E) z3 R+ T( p% J
& p; l5 M F0 p- `- v- $QR = $picPathAndName; //已经生成的原始二维码图
# q% I' L( A: o2 @6 p$ C - : e' P4 |2 h D/ M3 D I5 a
- $Logo = './pic/logo.png';
: L3 }( h6 S" `- n' W# b- G - : m0 F- f! ]& `- e
- $Logo_re = './pic/test_logo.png'; ! i6 \! d" M, _8 R7 G
- 6 j! E9 I" }" J/ B% h& m) N* `
- $QR = imagecreatefromstring(file_get_contents($QR));
0 o# D; M0 Y; \% ?! D( v. X' k0 j - & `9 P! m$ F4 W* }
- $Logo = imagecreatefromstring(file_get_contents($Logo)); ) v+ p: @- f& f, w' @
" H M) q; u5 s% H" r% h- $QR_width = imagesx($QR); //二维码图片宽度' t& F0 x6 N0 y% {, R& J
/ g" ]. t! X( F8 r- $QR_height = imagesy($QR); //二维码图片高度6 q$ w$ b/ C- L# W' K
1 Y; |4 W7 x$ z- $logo_width = imagesx($Logo); //logo图片宽度3 z; Z4 b3 F3 w& x
: |" r6 q% S& U$ W- $logo_height = imagesy($Logo); //logo图片高度& C- |, C& K3 i3 C+ F. j
- 7 ^% N* q3 ~7 d" \9 O1 r* w) a
- $logo_qr_width = $QR_width / 5;
: E- S6 B" ]+ N! r
+ p4 `7 K/ q' W1 h* [- $scale = $logo_width / $logo_qr_width;
1 D6 @0 z& @; U- M: d - 5 p7 L* O( y" }1 f0 t) V- y& W& o
- $logo_qr_height = $logo_height / $scale; & M2 o3 J2 f) }0 \+ q J6 Q0 N v1 H
! D) M3 q' ` c/ J2 a) \- $from_width = ($QR_width - $logo_qr_width) / 2;
5 N& H- r0 }* ]* @ e - ! w6 `1 J' h; e2 N" M6 ^: z# J
- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
) G/ k# ?) y* g2 x! d' B - 6 Z1 R0 ]! f' E- ]" Q# W
- //输出图片/ g* e- l1 T% G
. g# S; R8 X2 y, T& t# ]" z- imagepng($QR, $Logo_re); C& ~ x9 u# z: O
- J' ~# @8 M, S% K! A6 O% z' ?
- }
2 k1 D- c8 a) L; q* O - + c) ^: G1 H+ N1 ?8 I; D* d
- K N: @3 a# u K1 g1 \- U+ y6 J
复制代码 3、qrcode_vcard.php (生成电子签名)
1 H2 J5 r) h4 F1 f
I' r5 y0 a) ^) D; o- P HvCard格式:https://zh.wikipedia.org/wiki/VCard6 [- k+ `' R. {' R. ^- p0 ~
9 t. H: e# t0 N9 ~
7 I! X! Y, ?% v: Z- * Created by PhpStorm.
5 B. k4 `) F0 |+ _8 N) k; |6 ]4 x$ e
; c3 X0 F# E. e- * User: user$ [ W w( j' u7 x) _( t' v
+ m; Y- @7 H. Q; h0 k1 a- * Date: 2018/8/158 Q! L+ q- m2 a9 h
$ Y0 `' _) l9 g# ^4 C, o. e" i- * Time: 23:00
2 m) j% I( R, U4 V
/ M/ K1 z: N- k; Q8 R" G4 {. U* D4 i8 K- */require_once "./qrcode/phpqrcode.php";/**2 T) X. S# \7 }" T) C
- . E1 v$ P3 |+ u0 m& P/ e2 p
- * 生成电子签名4 V9 ~, J* }8 a7 w8 i2 Y1 q& T
- Y4 z- \% N% S% m2 m+ y2 r
- * PS;使用微信扫描二维码 m D. Z: A0 {" ^3 d# a' J
- : }% |6 V0 D& Y
- */$content = 'BEGIN:VCARD' . "\n";//起始标志
$ G* P) @! a& Z; K - 2 R$ s" G! @: _+ e
- $content .= 'VERSION:2.1' . "\n";//当前版本 n) |, y# R$ H5 x2 l e: j
- & _: X) ]9 V. i) l. S1 {
- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名
/ C" U5 a4 s8 l( D& R$ I2 I
2 m4 R x9 }' k/ b9 N; t9 ~- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称
6 J1 @% ~: F) ~% K7 V4 f - , H' Z: v8 y% t' w% x) s
- $content .= 'TITLE:PHP研发程序员' . "\n";//职位
' ?9 c. ]$ g; f _3 W
8 P: u, P) y6 }. [; S( ~7 T3 I- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话- }3 V: q$ b' ~
- E* O, M& b4 J( X+ O) K
- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址
6 J. v# ]$ @8 j ^ - . m, X# O5 R/ X% t
- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)) w6 [7 o6 Y8 M$ ]% U) `$ G% Z
: H5 P& ?+ _. h2 H- W3 y' X- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话' S. V7 ~* n& z' _! M+ p% ~
; P. J" j) q( u( `! Q' i) V+ {3 j- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱
9 e: i5 B; _& b
6 \' y5 h+ Z" w6 l4 J; l- $content .= 'URL:www.baidu.com' . "\n";//个人主页' i( o" ?( b0 D v! t
- 3 Y1 N( S3 m E/ e
- $content .= 'END:VCARD' . "\n";//结束标志
' h; t, n" ?$ T9 W! h X6 j
- }, d% k% }1 y8 L, `- QRcode::png($content);
3 \: ?' }' q, |( q4 H* f - & Q$ g. r7 o7 U( |/ W. u
- 6 M/ c: x- |/ O/ Y6 l9 B
复制代码
) u; V+ u3 ]) t# c" Z9 b$ r相关文章推荐:9 ?; a, I$ R" h& i8 [! ^
1.PHP生成微信二维码实例
* h/ e8 d+ z' h9 ^8 ~$ t2.php网址转换生成二维码1 D4 Y( d4 F. O8 B
相关视频推荐:
1 C2 }% R, R# D1 [9 L1.独孤九贱(4)_PHP视频教程
N7 b: N2 w* R Z: K2 _二、JQUERY生成QR CODE% d2 d- T+ H& w" p4 s( u
源码地址:https://github.com/jeromeetienne/jquery-qrcode" Z& |# {* w. |3 _/ k
2 s* K. r: X; S- w% v2 [; |jquery_create.php' I" d4 T& \/ E. |: |5 c* w a$ D `
4 L. ~3 H7 F+ g" O& g- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码 & K# i! t2 Y. U1 `& w. K3 D) k
三、PHP识别二维码
% e- _# `9 B9 A2 @% t$ G* p1、方法一4 p) h& }( T6 s5 @4 Q
环境需求,安装如下扩展% k( |: i" w( j/ E4 G L
- ImageMagick
% r- }, n; q0 \/ P8 S- zbar
6 E! p9 M! q- a- php-zbarcode
1 K- g) ~1 g; g$ _! ^; l$ T) W
# a$ E6 K4 Y! z9 `2、方法二) E' W: e' e2 O; w
PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以
: T3 m9 @5 V: F, |* oqrReader类:https://github.com/baagee/php_QrReader* f7 K' x% K/ E/ R v
2 C5 d, [2 ]( W' p0 {; I6 ?' D- ; J1 L- X9 e/ X# F$ x# Z
- $qrcode = new QrReader('./test_logo.png'); //图片路径! p5 E9 M! K3 |) L/ p
0 Q& k, Z( g' a! {' _. f- $text = $qrcode->text(); //返回识别后的文本
4 U, M- [& M6 @7 z - ' j" G$ i0 f+ e
- echo $text;/ Y( l _/ B8 z. E A% \
- 0 P0 H4 |9 T* e: `0 K) H" W* @
- 6 y3 Q7 P2 i% l. a& g1 E8 a
复制代码
( B l! I9 E+ B' y: \链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y74 z' u9 T4 q, ?7 N% U" [
: D; d- k) ~# n
3 ^" w2 @+ ?: n7 L
& X1 i- F1 R3 J- D+ C0 f& z- J4 V8 H( x" F; {6 r# K) a
. f* E6 f5 i" [; @, W9 }
; p8 X& D. c5 h) N2 Z: K: D \
/ W \& ~' j8 Q/ e9 Z9 |& g; ^, ]9 C( B7 [: z2 C# z- J
! a( d1 J# h7 e; { _# [; b! ?+ ^ |
|