管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。- m" Q+ a* j: V
---------------------------------------------------------------------------------------------------' n6 F, k) @2 A g
二维码的分类4 }8 A& D# ]: `8 k W3 Z
线性堆叠式二维码
- e9 O5 [9 j& G. Y: H; b$ J6 N0 k8 B+ Z5 \; O, X) h( t9 g* W% I
矩阵式二维码
, v" P+ n& n$ T% q. G; {; p8 k+ i4 z1 u7 [: Q- D7 S7 h g& G
二维码的优缺点- h( }0 A+ Y* D3 z9 a# t
优点) {1 F V+ P Q& _1 g( r
信息容量大
: ?3 z$ Y: D& n" K/ {, Z3 F5 V
+ E3 j2 Z3 w: Y; J( B, E编码范围广; d" o$ S$ A; F$ V+ F
$ j" H: F) e8 ^" F, w7 G
容错能力强9 V* Q Z) p' k& o% ~& u
5 T( q; t& l- R5 v/ x2 S U译码可靠性高
f0 p6 D8 v" @, [5 X9 r
, ]2 A8 F- W+ |- f$ ?! K$ R+ y9 @4 h可引入加密措施3 q3 R# e1 O1 P; H" o
$ X* W6 f& V9 k! Z2 Z; _成本低,易制作! I L& u2 C7 ]& L
% t. K5 R0 `# N; Q
缺点* T, `. B* ?0 E4 ]0 |/ N4 M
二维码技术成为手机病毒、钓鱼网站传播的新渠道
# g1 V& v R* _5 C/ b, ^! n; }8 s" F% J
信息泄密- E2 U1 c) t* t- a* S- r
/ _1 p6 V9 ?5 }; g$ X d1 T( d# g
目前流行的三大国际标准
$ N: d: V: T0 IPDF417:不支持中文4 t: ^% s, M8 s& s6 A4 W8 P
% n( C5 U& Z. V8 T3 v# t% ^9 Q' R0 vDM:专利未公开,需支付专利费用 U$ |& L# n% n* w1 t
* `( S) z7 H( v$ r! @
QR CODE:专利公开,支持中文
; i2 e2 w2 L: T, v# I
! K9 F7 n% i6 Q# M1 ]QR CODE 纠错能力
- G2 E' O7 p3 r6 N, pL级:约可纠错7%的数据码字/ U$ E! A" @- g. f4 ?# N
+ Y5 n0 k8 T8 a0 _M级:约可纠错15%的数据码字
7 V8 s" l8 h5 e4 [/ x9 e5 o& ?
1 R# n$ t2 T0 D& R6 EQ级:约可纠错25%的数据码字
; O6 M7 z4 S, d* ~2 q+ }8 o- o4 f( M3 H% _. n# ?
H级:约可纠错30%的数据码字
9 M/ Q6 D6 `. C* l' C( ]7 v+ J9 k& _ V8 V) }' i
前提条件
* y+ x( ^+ U JGD库" R6 ?4 a0 j; u
; c8 X4 V2 J6 C: q% W, \
一、PHP生成QR CODE
6 D, ]6 e# s, o. E( K% l: S官网:http://phpqrcode.sourceforge.net/1 U& i, Q% P( r) l4 n6 N
+ t) Y( i2 x; Q下载源码:https://github.com/endroid/qr-code
Z4 Q# U) f2 m7 X8 l6 e
W! e; Y# `8 U- y9 I目录结构
) v# W, T$ N2 ^+ @
! J1 N( }; K" e4 H8 n; ~; f
9 F0 J0 j* B8 X6 \- f! ?7 C R
1、qrcode_create.php
$ @7 I h. S9 z8 L6 M* _ps:生成普通二维码
( N9 Q6 A1 F# P* ~, W# m& P
2 Z4 N: u2 F+ y- include_once "./qrcode/phpqrcode.php";/**
: F& o v- K* B$ C - 0 D1 y% L1 m% K/ d' q
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径
2 z$ i' S8 V# f, Z0 h7 ~
1 C) @& I4 k$ z! |( j& v' o- * 在浏览器上直接生成一个二维码(内容为abc)- B+ ~ a0 M& f
- + R* i2 U* R; D q% M$ k7 {
- */QRcode::png("abc");1 a. q) U: V' b0 u! [& k
l! Q. q) F3 Q3 v- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/*** V# ~" m2 _. C! _; m; G5 q; W
0 y( j' F$ C) k3 m) h3 i5 @) q* w7 N( z- * 生成文件到本地 e8 q) l' |, C( H5 b8 ^: _
) `$ o- D0 r: y+ R3 ~: g- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)
4 T% G! Y* r2 c' y% `) L - , p( q% Z" q, s3 A9 M9 S, m8 I
- * PS:$saveandprint源码的p6参数做了修改2 V; Y6 Y0 [* S5 R6 B
- + H' y8 p& s- ^' V9 h
- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);
- e+ |% \5 Q/ o% r- X! x/ W - ' V4 v& z! x7 B* t
- 6 ^4 N' d4 F: C3 `1 R6 S/ r% e( ~7 y
复制代码 # h7 h% i7 H/ _
2、qrcode_logo.php! G2 ]: y' v; s7 ]0 ^
ps:生成带Logo的二维码
' J) E( n E; R& _% `, j3 |/ h6 F- /**/ W/ q: |: i2 Y) r0 [" z! h9 z
- & i4 ^4 f' P+ h6 M) n- e" w- E a
- * Created by PhpStorm.; x9 ]3 o: h, E3 n9 g
- ( e9 j! c; s! X4 |! _7 O9 W
- * User: user" E+ E7 J6 t, U
8 }" a. P5 P, e8 r$ R- * Date: 2018/8/16
. d! c2 [4 S# @ J+ v7 X0 r
3 N" f2 M. b* J1 n7 g/ D4 c# S- * Time: 10:43
6 @/ u; p1 T* v2 {5 J* U5 q7 t& q - : v1 g/ }5 S: y, T( L% V3 N
- */include "./qrcode/phpqrcode.php";$txt = "测试内容";
2 m3 \0 v- Y4 s( N
& }- f+ f: v( d, I4 I/ X) V8 R( V- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称
4 ]. a0 o3 y% p: I1 W
$ [1 k6 {4 u) Y8 b7 I8 F! I- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是6 b, |; k; `3 b7 @
* z5 c0 E5 V& j3 ?, \" b- $margin = 2;//边距
2 j; v0 F1 ^: _
. s0 F/ F# c5 i7 G- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片- G, N! n9 W \; i) @! Y
( f6 V' q+ B2 P8 J% J! F- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){ ! C1 s* C z: \: O2 x
, J9 W4 E, V9 R' H/ Y- $QR = $picPathAndName; //已经生成的原始二维码图
- F8 |; j- x- B4 J# N0 W& E
6 b3 D! ^; L3 V+ {4 @: l1 a. {- G- $Logo = './pic/logo.png'; - Y: {' e6 t$ e% C: L
7 }1 K+ y* |! O3 ?5 ?, Y- $Logo_re = './pic/test_logo.png'; % b+ d" z6 n- Y; @( V
7 [1 y1 k: o! ^; x( k4 K- $QR = imagecreatefromstring(file_get_contents($QR));
7 E$ [) F. Y, ^ e! R - 6 X, P. x5 |& K3 M: _0 @
- $Logo = imagecreatefromstring(file_get_contents($Logo));
$ G0 j' b9 F$ d [ - Y+ X, R# d# F2 ], w+ { `' y
- $QR_width = imagesx($QR); //二维码图片宽度
+ S7 ]/ |: N3 n1 {. F1 J0 | - , b3 U; Q7 n8 e4 o" p( N, g
- $QR_height = imagesy($QR); //二维码图片高度
& s( O% T W2 L4 f- H' N - $ D( y' u9 [3 a) J1 v8 B. O+ O* i
- $logo_width = imagesx($Logo); //logo图片宽度+ Z9 }8 a- H3 @8 ~: b
) a! Y, T _9 X4 T+ B, _- $logo_height = imagesy($Logo); //logo图片高度
( X! H9 Z. S( c# B9 K3 ~& } - - e) t6 H6 L) K( m( D
- $logo_qr_width = $QR_width / 5;
2 o8 e5 w. Z" N& V+ W - 4 A1 h3 w- E9 i% l! Y
- $scale = $logo_width / $logo_qr_width; # z3 ~, F# X$ D# M3 l' r
- ) ]3 [" k9 b% I- X
- $logo_qr_height = $logo_height / $scale;
1 W7 }" Z1 C. A
( Y( u1 P! k9 q5 g( Q6 ~7 n- $from_width = ($QR_width - $logo_qr_width) / 2;
! d2 H. N/ z$ q9 p5 n, ?- H: z - ' x& k0 l7 K4 p9 p) t& {5 @
- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height); 4 }2 ]" J( s4 u! K! }9 B5 V
- 9 y( y$ e# n+ y+ j6 b
- //输出图片
- |$ t( c) K$ H. r, P! S - ! f) D' l2 Z+ k5 X0 y! d( [- @5 s5 I$ \# h
- imagepng($QR, $Logo_re);* f# h. N! I! \
- 9 ~$ A W. I. @( b5 g! ]0 a9 Q
- }
% Q" u! K& n# Z
1 h( m% H$ n- p3 R3 g8 o1 q
9 o/ S, N- H' A" R/ D
复制代码 3、qrcode_vcard.php (生成电子签名)
1 G' D$ D! {& n3 I: B
+ M$ L" Y2 b, N+ j5 T! o2 l1 L& BvCard格式:https://zh.wikipedia.org/wiki/VCard2 t' q9 |5 u+ N( {* \* W
3 f- Z( E. N) r: n
- f$ b& H/ u6 W9 z8 K$ h$ n) S& k- * Created by PhpStorm.
: z1 r& j/ |8 H/ U* \
( {0 |- d* ?, T# v& W0 |# {8 |! F, I- * User: user
0 V5 x6 z5 _2 V; w5 g
3 H% W7 O R3 W: a- * Date: 2018/8/152 r# s/ a0 ^1 D; Y! Q' ?
- 0 g4 c$ \* q; c
- * Time: 23:00; _* G( O0 J) D0 T* l7 k
0 G# g) p: Y2 l! Z- */require_once "./qrcode/phpqrcode.php";/**6 m- {9 H0 `; O) C, N
- . l2 o5 k2 t3 V. a) o: n2 w
- * 生成电子签名
1 V7 Q4 e9 z1 a6 o
8 Y0 }; Q0 p4 u, e- * PS;使用微信扫描二维码
0 R& d) T" Z9 A5 l2 o/ b
; V2 T& {0 s% G" o8 C6 Y; U0 r" a- */$content = 'BEGIN:VCARD' . "\n";//起始标志 ~3 t; G$ `. V6 x, t7 c7 h
( ]+ r+ E% v. E6 Y* `- $content .= 'VERSION:2.1' . "\n";//当前版本
( d, g$ `& r3 |6 Z: C - 7 e: Y5 m- Q$ W/ G/ d9 x+ N% w9 v
- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名
4 c% y0 x+ F7 B# j2 l' v; f9 u
- b! d; J" s8 y. T6 I8 t- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称
& t- \ d/ C" u9 n Z
# G( W$ j) N+ K8 x i- $content .= 'TITLE:PHP研发程序员' . "\n";//职位! X; L9 W+ }9 T' F8 a
- " V" c* v0 S, |( n4 h+ q% ]
- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话- H' w2 i/ j7 n+ S" i+ k2 c
- 6 C! S }0 C) t6 ?* G& F. L
- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址
$ S$ p8 Q( I' m- ~
2 P+ l. j' b# L# W- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)4 e3 c3 H/ n0 E# d$ |# b1 F: a
/ X$ b2 K/ L6 R8 t2 s" z- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话
! ? m0 s/ |0 X q - 1 P( _9 g) G% H1 u1 q- Y
- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱5 d' a) ]) c) I
- 7 W* a0 D. P2 t6 c$ c0 K
- $content .= 'URL:www.baidu.com' . "\n";//个人主页/ n0 I* M$ Z% [, C; `2 Z
: V4 B! b& Y2 e- $content .= 'END:VCARD' . "\n";//结束标志$ B" Z4 ~) l7 O0 w$ X _. j
- - x# \! U% Q7 M5 c
- QRcode::png($content);
$ ?% B3 n8 k" @* j4 ?" G
/ X; K% i. ~0 H/ i- $ B$ V( S7 q( [& {; H
复制代码
9 ]5 G$ o- n' Q7 U相关文章推荐:
8 g, L2 a& y1 k. U* c N- q1.PHP生成微信二维码实例9 P: Z8 k6 R% K* Y8 q# w. |6 H: U
2.php网址转换生成二维码: P: h7 U" R; [0 v2 V
相关视频推荐:. x9 j: \) q/ n# I5 p9 r
1.独孤九贱(4)_PHP视频教程: p9 Y% }) ~: L" G" _# i
二、JQUERY生成QR CODE
" J* ]+ }0 y: T4 r' ]/ b+ U源码地址:https://github.com/jeromeetienne/jquery-qrcode: J' _ d. ?# n7 q* g
4 Q4 ]1 w6 ^* w+ b5 [5 w9 h
jquery_create.php
5 x; [" B8 W6 w% j i3 x
% p$ J+ I6 a2 _/ [& D7 k( q- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码
( J! p" k0 G, @" v6 \' b三、PHP识别二维码
% T8 W7 b) U; F# c7 W; H1、方法一" ?) U' h; g1 S) U- H7 B0 J
环境需求,安装如下扩展
0 _7 M) ?# L. {- ImageMagick
8 V* \7 \) i; T- zbar, w# |5 x3 `$ z& c6 |' |& O- Q$ E
- php-zbarcode; e; u8 v/ _5 [
7 o C: r" z) B2、方法二
1 G( p3 A7 w9 IPHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以
5 ] k+ p5 u; _# x6 WqrReader类:https://github.com/baagee/php_QrReader
! F* O/ C6 }( l3 f' F( k7 h7 ]9 m5 i8 ]& z6 S) y8 U* a
3 z( i# b2 w" F' T6 B/ a- $qrcode = new QrReader('./test_logo.png'); //图片路径
9 \( ^. H4 P3 S7 g! r: b* V - - C. i3 T% X( y! j
- $text = $qrcode->text(); //返回识别后的文本
% e9 |9 p3 }! {- j
% {4 N. t, u1 ~' O- echo $text;+ E0 O0 l0 d5 g Z
1 L& f$ A8 L5 ` t5 x- * H) y- {; Z9 _5 d
复制代码 3 _) _7 o0 z. w5 V
链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7( z1 f* X% o' x* b! q+ V" _& f
9 n1 x1 e4 I2 \, D) |6 g4 l* z0 @, r# `2 t2 R& P1 p" O7 r$ V
z: y, ~8 | H, G% P) t' W
" b8 Y; f) j3 w$ m2 ?" @' ?5 s
; ?/ V, S P7 ?6 h5 w( _- V
& ]- [4 l- X h( N) w0 g2 j/ P7 C; m9 _6 e/ F) h) E: e
1 G% ^1 W- p; o" o
9 s3 t9 Y- A8 X5 k/ J2 {4 C |
|