管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
: d& F8 M( ~1 y' d4 o2 O% c- c2 V---------------------------------------------------------------------------------------------------, ]! D3 K4 H& N
二维码的分类
. y: ]3 I$ e. O线性堆叠式二维码& H0 L1 C& _7 Y8 b/ l0 o' r3 Z x: q5 d
) s0 ~5 |7 G2 r1 r4 b* f/ i
矩阵式二维码4 V# C b% M8 \6 J
2 @; B% J7 V* N7 }: H二维码的优缺点
8 {6 y3 @5 }7 N) ^0 T优点
6 Z2 `# G- ?1 D+ F, @) `信息容量大* v; R! o8 f# c4 d/ J3 ]2 d G
, q: \' H8 v8 A! h编码范围广: @* ~& j8 `" Z7 T! U5 P5 F
. f; J. ?# J6 }% r
容错能力强& p' X p0 N9 q0 s7 Q7 r" }8 X
- ]' M3 Z2 d. }8 z; Z/ K译码可靠性高
# \: p+ H' _$ E: u" H9 ]& H' {
! @7 _1 P& \. L6 S9 `可引入加密措施
! l1 m- _/ h6 ]% D& }5 v v" V* F
成本低,易制作
, m' o G# s- {. V% ?& r! d5 w8 ~0 @9 u. Y
缺点
2 R4 \# {2 \% l# J6 g K* D; S二维码技术成为手机病毒、钓鱼网站传播的新渠道
$ h1 l8 [) }1 u ]
. b. X/ c; j2 b; }9 p3 t) f信息泄密! N) O& o' F5 H% F5 x9 _3 T7 j u
, D' r; v( w5 h2 [( N- e$ Y
目前流行的三大国际标准
6 F, P5 t( B$ x, E% i( RPDF417:不支持中文
/ ^0 T: o. S3 k4 { }4 T( c! i; ^5 k6 i
2 O% p9 |6 U8 m+ V, _6 n2 }! U7 IDM:专利未公开,需支付专利费用
& g2 B0 S" Z# R: U/ d* {2 F- i8 W2 w* C* k" @6 t
QR CODE:专利公开,支持中文
0 u4 v+ } s, `5 L$ i3 b7 |" K- x: |/ L
QR CODE 纠错能力
6 t! E4 _/ |! ?: a! r" FL级:约可纠错7%的数据码字
$ R1 I7 h* e! t& m1 j: B
; i- C4 W4 K( n# T, i7 T$ yM级:约可纠错15%的数据码字
1 W- j0 v& C# v/ O/ _# I( p9 x9 T6 q4 s2 J; h
Q级:约可纠错25%的数据码字9 z9 D. B/ u% I% l6 m; k) X
& _+ b% r7 y# N* C) ^/ g
H级:约可纠错30%的数据码字
) N8 `8 `5 a1 o) \* i
. w& n2 Y1 u" g前提条件
4 ?* t6 X a! D: g& C; aGD库1 o9 f$ [, I! A# \; T
) D" m' w) J" g3 H3 y
一、PHP生成QR CODE9 ?" h" p$ u2 e0 }0 O
官网:http://phpqrcode.sourceforge.net/
# ?5 J) W5 u8 E: N; w9 \
6 z6 v- p; Z$ _1 F下载源码:https://github.com/endroid/qr-code4 w3 Y3 r& `' D2 R) b g
6 M& b* p: Q/ \! L: E& _目录结构
! S e* q B( ?4 M' s! R
/ ?* m5 i* |% W" K+ g! k
4 m+ c# W P! b( Y2 d+ ^, I. D' k1、qrcode_create.php9 X$ r; a1 k `4 x8 z5 ]. T- e
ps:生成普通二维码
7 Y* |: w6 e9 B# [- I+ k6 b6 L# T0 K% x
( v, r4 J3 f+ b' G- include_once "./qrcode/phpqrcode.php";/**
1 _: c( w h; I8 C* Y( l - / ^! {, y2 H" @& ~9 D
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径
/ @: P6 c0 W8 \% V
- d# T/ J u7 ]2 a. t/ a- w- * 在浏览器上直接生成一个二维码(内容为abc)
0 Y) J4 r& `9 I& S a - , @3 E4 J+ d; ?7 n' v. ^8 ]
- */QRcode::png("abc");1 m8 \" A t1 g) @& a6 ^$ n J" A
- , M6 a* J2 e$ Z. o9 w' Y, q: ?
- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**% F* k2 B* R0 n* P2 s
) Z9 H% C' g b- * 生成文件到本地
# Y# @5 i5 }: c
) w3 G# t* d) G- D: Q6 x" S- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)& w, p( |- y7 Z/ z# o; o5 }
- 5 Z5 A; x) f' O
- * PS:$saveandprint源码的p6参数做了修改; H3 x6 \7 q; r2 W
- / H- T% q4 e. ?, @4 r' Y
- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);
$ G8 _" t A0 y
& w) E4 _; T3 k% h
) J9 p q" O, ?9 K2 D) D5 y
复制代码 5 q5 X1 }+ z+ C- q
2、qrcode_logo.php
5 b4 x5 q( V. D1 }: T1 j: C! p8 x+ ups:生成带Logo的二维码
- w L* g. l) o, s% o* n% J- f- /**0 [8 `& q9 x4 t+ v
& A5 J$ y' g/ ~' K- * Created by PhpStorm.
8 \0 R; T* u3 i) Y: r/ }8 E
( [; B( A8 W) u- * User: user
2 R% T/ I" N7 p- g7 ^5 c, X+ j7 z
: \7 L% A* O3 g9 U- * Date: 2018/8/169 I0 P7 l: ?3 W% t6 {6 W
- : r3 J; L, z% N2 u
- * Time: 10:43! V) C* N3 Q' ]" {
& i- F# {. Q: S8 A& A/ |# _# K- */include "./qrcode/phpqrcode.php";$txt = "测试内容";* l5 t/ Y w7 s% R4 y
- - ?3 }7 r( E. B, X) ^2 ^: X
- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称0 K2 W# L7 @- z+ S. H
- 8 U) w) p. J6 V: W; f& h! ~
- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是
: ~: q) x2 z R - 8 M# h# T w* t7 A% b @' B) k
- $margin = 2;//边距. t. N# U# p9 Z! i. @" y
- - F6 q4 ?8 X. _8 O
- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片
( a% N5 b6 c" I: v. x: y: ]$ h+ ^ - 1 @& ^/ b7 @6 n4 U7 ?
- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){
& S- s+ x. f- Q, h
# [5 h7 {! \" o" D- s4 ]2 O9 S7 B- $QR = $picPathAndName; //已经生成的原始二维码图' e! O* J5 k7 D' F( v. r& N4 C
* L3 E# M7 d; `1 ]" r( Y$ ]' t- $Logo = './pic/logo.png'; 8 \' _, j6 V% S% f
8 d. t; g/ H1 h/ @- $Logo_re = './pic/test_logo.png'; % ^) N! E7 k* X& F; Z& d1 V
- 6 v9 a* D: o' [$ s4 B% m
- $QR = imagecreatefromstring(file_get_contents($QR)); 4 G) S s8 B" P l2 d
' f8 ^8 Q) m3 W- $Logo = imagecreatefromstring(file_get_contents($Logo));
% K/ \$ ?8 ]. Z# V0 \5 p% x
! N8 T$ P9 m8 @- $QR_width = imagesx($QR); //二维码图片宽度
. G" U( W, z R5 y$ E& a. `
J1 k* p5 c' \# o3 h: {- q- $QR_height = imagesy($QR); //二维码图片高度- t% n- J4 s5 u
- ) R7 k$ \" E3 x* C) h* j0 h
- $logo_width = imagesx($Logo); //logo图片宽度8 E4 c: u4 h. f) l* o. @" a. g V8 p
+ W, d1 W. N# ?: j. E- $logo_height = imagesy($Logo); //logo图片高度+ o! t+ b$ a F: w* u
$ r- T6 R; l g# |& r1 E }- $logo_qr_width = $QR_width / 5; 3 R4 @* K( W$ U. w4 V& o
- 5 j. `/ e# J% ?: |7 Q& M
- $scale = $logo_width / $logo_qr_width; 9 Z% G& [) J# ?
# E$ b _2 ~$ N5 _- $logo_qr_height = $logo_height / $scale;
* U2 I# r6 y$ _ - # l4 f9 {+ c5 Y" `/ ]0 ^
- $from_width = ($QR_width - $logo_qr_width) / 2;
( S7 Q- i1 H2 b& V - ' I$ M7 `) F& I* [6 H [" J
- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
- z: [6 U5 G4 p. ]6 G& Y - ; J2 x! F# A3 T: {1 U) l, s
- //输出图片
6 t0 a4 ^6 k0 p* x3 M) [9 F$ I- I% s
: }* b0 k7 g) j% S( {) A8 ]( A- imagepng($QR, $Logo_re);
3 t- H$ A8 C8 g5 `) j6 Y7 d
. h% k# X3 y |8 |0 h- }
7 @0 P" f# b* j) o9 `% J$ f - $ Q: [6 [ w( T$ q5 z+ A
+ ]1 c+ @* g& o" X
复制代码 3、qrcode_vcard.php (生成电子签名)
9 }( y0 n+ e6 s8 `: i0 k' f
, Y+ n8 F, G. U3 p# ovCard格式:https://zh.wikipedia.org/wiki/VCard# c# t9 k" ]1 a8 {; \, E
$ ~4 S9 B, D P" p3 A9 V# M
) w, i" ^1 P6 M2 H) @; H- * Created by PhpStorm., T1 b* ^6 Z$ o9 @8 _
- ; a) l! E' G! p4 I; R
- * User: user9 [) Z# H4 @- [' P& q
- $ a: R: O( n: p; Q1 ~! R
- * Date: 2018/8/159 w: ]0 H' D: s# u' b/ S1 r+ }
& O, H3 O& D7 C. d- * Time: 23:00
4 V) ~7 v7 R: |% \0 }- G3 t0 V6 q - * F- a! E2 K9 j( C- |5 [
- */require_once "./qrcode/phpqrcode.php";/**
( v. v3 @9 G% t5 [# [' i; { - ! w, Y& ]5 X4 F& v$ l1 }
- * 生成电子签名
- W8 z1 w% M4 i - - b: d5 {# r+ E5 O, q* J" G) M
- * PS;使用微信扫描二维码" }2 R6 @. f/ Q7 J j
6 K: U8 T! T. {! z- */$content = 'BEGIN:VCARD' . "\n";//起始标志
' m" W' X7 i" E' B
; ]! R: S: ?9 c: \4 S5 f( B% w8 z- $content .= 'VERSION:2.1' . "\n";//当前版本* F0 r0 x5 z1 Q" k& v
- 1 i( Q- h9 i9 B) `; \$ W
- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名
- G1 C5 d$ y; F! @ - 9 @( t* l' e/ M$ a( K5 j
- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称
% ?* A Z& u2 o) u' ?) @
g' l X7 P# d- $content .= 'TITLE:PHP研发程序员' . "\n";//职位9 _8 S8 O7 z/ f) C5 h% @
- 0 p+ O/ J5 w* J
- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话
; h9 C( k3 A/ a$ @0 z/ y; R8 w* g" V - 1 C3 Z! S( f$ a
- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址
- K4 `2 w- g/ w: h
" S$ V- K9 M2 P2 O& v/ Y- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)& x# |5 a! [3 m) r, E& {
- * g" l% J9 @% L D @! V
- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话
4 w; S9 a% i0 O9 b8 O, e! I/ y - 4 R0 I/ O: F# R6 f& @; x$ Y
- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱
6 d0 j* ] H7 w# U! q
6 s! Y: G2 p# z- $content .= 'URL:www.baidu.com' . "\n";//个人主页& m5 w9 ~1 b4 h$ j
2 f z' P: G' z6 Y z- [0 I R4 A- $content .= 'END:VCARD' . "\n";//结束标志
! w; `3 y) h+ F) |9 q - W+ a1 }& g6 v q- F
- QRcode::png($content);
0 D1 Z: W# S( j" w- A2 U - 2 G5 Y* T8 S: O' t# K! ^
. E; \* V0 X/ g& E% g8 @8 @+ h
复制代码
]0 B0 G" v* e4 k" Z$ |: e5 y' n相关文章推荐:( e8 k. ^0 e, e
1.PHP生成微信二维码实例
1 ^. M8 x& f9 T1 a$ V2.php网址转换生成二维码 S& G# w' F# ^+ u* O! Y5 p$ B) G
相关视频推荐:/ ?* _2 t1 _8 P9 W _6 c* C$ K n
1.独孤九贱(4)_PHP视频教程8 _. o% x: ~3 x3 v$ l* Y, P
二、JQUERY生成QR CODE7 ^+ X) e# o: w
源码地址:https://github.com/jeromeetienne/jquery-qrcode, y( X$ ?: b2 ~' y0 ]! g
8 W; h0 ], N0 C9 Z9 R3 ojquery_create.php
" [: I" ~/ c* C, l' @1 R* Y- N/ o! F8 F7 m+ W8 v7 V$ H9 D+ _, x, o
- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码
. h& c1 C% P; c) q' D: d三、PHP识别二维码
: \- B4 ]" n) I9 P0 f& _6 }9 K1、方法一8 I6 f2 L) x; ]0 B# }; F+ [
环境需求,安装如下扩展9 G6 T# ~7 a0 i& s
- ImageMagick9 d% O: V* Y, @6 i* q* i: t0 E, Z
- zbar/ ~: B# O" C, E& K( W
- php-zbarcode
! a2 F' k$ h( T" w. v2 r6 A; v' r% f% H. D$ A
2、方法二
$ o& x. J3 ?4 W, p3 T- U* p) g4 hPHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以7 `0 k8 E+ U; s3 t ? g
qrReader类:https://github.com/baagee/php_QrReader
3 F& D$ i* t$ a4 F
4 _' w! ~3 l, t G0 F1 s, O- % ~- Z* I# L. A' H5 M7 J# Z- S! P+ a
- $qrcode = new QrReader('./test_logo.png'); //图片路径2 j8 H# k8 h; D
- : h# u0 v$ ~# K% \
- $text = $qrcode->text(); //返回识别后的文本' Z/ k% p% {0 `( g# N7 O
- ; G, Z) A8 u7 Z( U" B: g$ P
- echo $text;) R3 f/ F4 J3 H& w9 J
% A$ ~. D y/ m8 z3 y& h9 b' @- 7 ^5 c. ?3 r, D( q8 E# M% W' L9 r
复制代码 , I: j7 H; R5 X4 J
链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7
" N# W2 H* Q* C3 } K2 [
8 v: I: a x% X0 h7 I2 [/ j# M
. f7 i3 \4 t& z: y) A) D4 d, Y. ~; }9 [/ E0 ?2 K
' w# P/ {& [9 T% U. b
( H8 G/ F+ S3 G
7 B: Q: i! {5 O. n7 b, C
" u! z+ }3 P W0 Y! A/ b) r2 r) \& f% c" f) r3 ?+ a
! |+ B* m V* ^5 x: Q* m) h5 L B |
|