管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。( D' e; F5 b6 B6 u' c; b
---------------------------------------------------------------------------------------------------
: ^$ H5 s# G& o, a二维码的分类
4 g- j; F; x) m7 H) J( _线性堆叠式二维码
0 r6 k, ? U: g5 p( j& T+ c c( m
矩阵式二维码4 F! y! {% [, m/ m/ U8 }
: y5 b. c: P9 Q D. F* v5 l2 f
二维码的优缺点* l" x7 A9 u' z5 B0 h% U
优点
8 K, G/ r* A z) T4 S信息容量大: p, n8 r; v3 x! {2 L1 i
4 _( J; i0 T/ b
编码范围广
9 [% r& `2 ]6 A _# s5 f% Q L7 X) c7 X: C
容错能力强
7 }, Z* ?, ?1 l5 H- ]2 ^8 x- o
, u( \) k: c1 z6 K% ~5 M译码可靠性高 s! h8 a) E+ D$ m* N! k
& s8 ~; i& U+ l, A可引入加密措施
0 g* K* D: F2 Q% H B+ m; C# } ~( \. V( R
成本低,易制作
3 l2 P1 Q9 g5 i
: e& Z, y( h( e9 n# a+ X0 K' o缺点, S2 i" W! \" M$ V; e7 J
二维码技术成为手机病毒、钓鱼网站传播的新渠道
( Z M9 p* W' [, c4 Q9 i2 t& p: \* x# G5 Q8 v
信息泄密( ?/ B7 T) v% s" D0 }
' S' w e. f( y9 p/ W3 \7 f
目前流行的三大国际标准
+ W* i" ]3 O, o$ jPDF417:不支持中文9 e- v, X- k7 ?' d$ F) B/ f$ o
9 F! G7 Q" \" _8 e# o( |3 yDM:专利未公开,需支付专利费用
9 a1 V( i% F/ l$ }, ]0 G8 p; C0 k5 f3 \: H8 q1 e
QR CODE:专利公开,支持中文, u! V& I! t/ l0 R9 C
7 p* G& G# ^! a+ A
QR CODE 纠错能力8 e- c% N) Q8 {' o" x2 a
L级:约可纠错7%的数据码字& w6 b- i+ A1 |4 O; G0 q
3 c0 r6 S. L2 ~& S# l8 V1 x* s- O
M级:约可纠错15%的数据码字$ u) a5 I3 m/ F, g Y: n
/ T" }1 m% ^5 L
Q级:约可纠错25%的数据码字( x( a7 o1 l+ y8 y6 f! m
% ]* w" L1 D; ]5 \; J' ]' }H级:约可纠错30%的数据码字
1 D% f% H+ g! A
- i5 N% ~* d/ j, A0 V. G$ n P前提条件
1 G- R# R- U( ]9 }/ S# AGD库
( D7 I6 Y! z/ e8 m1 Y4 A3 x3 @% c2 T3 l' g; Z8 I4 n
一、PHP生成QR CODE6 P; I, D6 B2 r5 M4 G4 l
官网:http://phpqrcode.sourceforge.net/
5 J; N6 {% |& z% k; c
6 f" _$ ~. W! R% G下载源码:https://github.com/endroid/qr-code
+ Y& ~8 v) g$ a5 T8 \5 @7 \4 h, l' m5 D& h7 _7 J9 W
目录结构, @6 n! q' K! g$ a5 H
! W* Q. H+ _ q) H8 P# l& R# k: E( C, j/ O
1、qrcode_create.php$ Y6 p* T, v; ?) t) x
ps:生成普通二维码
u6 D# S) N9 p- b$ {1 Z- 0 Q1 x) Q* l! k; q Y
- include_once "./qrcode/phpqrcode.php";/**1 s7 M1 D7 n( n: `
- : ?' n& {$ H/ N( j& u
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径
& [; c4 g7 X+ i6 E m7 k2 y - 8 H: f6 K$ \" v2 w
- * 在浏览器上直接生成一个二维码(内容为abc)
* k1 k: c. J# {% P# v# K5 P% ~
A( l. n( D7 d- */QRcode::png("abc");
0 Y# F& N/ b2 o" j$ |
; P S0 u2 S# L- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**
% c0 F" |8 {" G! ^ - . T0 p' k& @( v; }! O
- * 生成文件到本地
. ]3 I; @- D. f# Z/ j/ i; v
* r+ _( L L- t8 d' e1 E- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)6 J3 S) q% w& b Z3 D/ t' ]& a: i
- 6 Y! G0 X6 s/ v4 r. o
- * PS:$saveandprint源码的p6参数做了修改
0 l+ b: k; b4 C1 V b8 m* s& F9 Y, q. U
3 p( S9 w4 b) { ]# H0 x3 R- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);$ o/ w. T# S/ m, O5 j
# s( }) E3 d$ [( J! j( R5 o" X, ?% k- 2 u. A3 b4 T4 M# g1 N
复制代码 1 N6 F6 k' a) \8 u& l* }1 R5 m
2、qrcode_logo.php
2 g6 x, ^% J/ X" |ps:生成带Logo的二维码- 5 |, F0 O9 E+ D" a- o. c u9 G
- /**& a6 x! J- o- `) i
- " w' J, y4 r, a2 n& b7 C
- * Created by PhpStorm.
% ?6 ^2 M9 c! }4 @! z: @7 V( ? - q# H5 n+ _7 v3 h: S/ k7 W
- * User: user
* T8 l- G, v' L# x0 K. N! q
* m1 l( u2 r: x1 U1 ]4 d- * Date: 2018/8/16
6 {* h2 a' K: K7 v - ' }4 U& q3 \ `: J; ~5 b/ l6 j
- * Time: 10:43
; x6 S. G: p8 @7 z - 5 `' _$ ]1 Q0 }+ Y1 ~$ w1 B. |7 T
- */include "./qrcode/phpqrcode.php";$txt = "测试内容";
B1 y6 \: s+ z( U5 [ - 6 j2 s: [3 Z. ?' H8 e; F' A
- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称2 I' _8 a$ W" Y
" s7 t& x* D( Z- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是
7 D% G4 A3 q$ H1 ~. O6 A9 _; m6 k - * P% v6 _7 B* u/ [$ d: ^2 {& R9 Z B
- $margin = 2;//边距
/ l r7 V# n2 @
/ W4 K1 \3 P$ {2 ?" Q4 t- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片9 m; W; h# |5 B h3 c
$ s2 ^8 ?* @% F* H" ?! R( ?2 F- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){
$ ?! E: R% x. F& q - - v! ^! J0 R. R2 J! y$ W4 `% f+ ?$ e
- $QR = $picPathAndName; //已经生成的原始二维码图
4 x7 s- d6 ?7 \: I& s& T% T" ?4 r - 9 b' ]9 H! I! o) f8 }* j9 |. U4 [
- $Logo = './pic/logo.png'; 1 w2 N- o' h4 V/ R& v
* l$ `0 b( ]+ \* ?. l- $Logo_re = './pic/test_logo.png'; 4 y; H. |2 L9 j) m
3 b2 G: u$ p- Y, E, a! `0 f, @( ` T5 C- $QR = imagecreatefromstring(file_get_contents($QR)); 2 i7 ^' ~. C+ @( `' ?4 I
4 ^. M% P( y: b Z+ s; t- $Logo = imagecreatefromstring(file_get_contents($Logo));
" q9 ]2 D3 D8 ^2 T" L - 2 H+ c% c3 W! s% [6 C0 A% E
- $QR_width = imagesx($QR); //二维码图片宽度
2 y/ r5 e) P# F$ J
$ m, Z* D% r, q: {4 x% C+ L- Z8 V& Z- $QR_height = imagesy($QR); //二维码图片高度6 E5 s9 ?% I$ _ m* ]$ X
- 4 Q% ^; H: ^: }6 p
- $logo_width = imagesx($Logo); //logo图片宽度" T0 e" ?+ Y4 ^$ M/ R" }6 C& G' c
' l7 g5 o, w( p8 W- $logo_height = imagesy($Logo); //logo图片高度
8 ~ B" Z0 J5 H4 o) F. k
+ G3 L7 A: I" R$ _8 n4 p) a- $logo_qr_width = $QR_width / 5;
: @' \/ u) h9 ]/ g( }( ^* W& U9 W
# S! }" k7 m. S0 ?- $scale = $logo_width / $logo_qr_width;
- D. _7 @% @* t l3 ?/ S. |6 k - . q. h$ U# k3 @# n8 x
- $logo_qr_height = $logo_height / $scale; ! @' x6 A1 p5 Z) H: L
- ) T( F4 Q! T% r F% s+ r
- $from_width = ($QR_width - $logo_qr_width) / 2;
* [# r, z6 K6 g$ _
2 z& M+ K* H6 D: o+ z- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height); 8 W: T5 D. }; N
0 x+ Z7 @) k6 h- //输出图片
! F: \1 y! a8 Z
3 k- n' ?) Z+ \" Q3 ~& w- imagepng($QR, $Logo_re);
5 ` Z+ F1 H5 b
7 f5 j; ^" p5 O; |4 c! x$ l- }* x. c, B' U* ?/ P( E
/ U7 D: ^' V7 J f4 M- # d2 z3 K! x& O4 @, [: i1 J4 Z( T
复制代码 3、qrcode_vcard.php (生成电子签名)
0 ?1 m0 V1 j/ U7 {' f% l
' D% |/ ^% J3 ]- IvCard格式:https://zh.wikipedia.org/wiki/VCard
5 l: W6 r. i$ T5 W; ]4 r0 X7 w" O( w5 E- K0 k# l0 E1 |+ g
- 8 m) v9 G" ^8 q1 O7 S
- * Created by PhpStorm./ D- T# O' C" Y* O
- . T! r% A$ a% e2 K# F
- * User: user/ S' |* X' f; R2 Y
U& S. Q% E* V" d% A- @- * Date: 2018/8/15
: |4 x: [! W5 x1 }
5 b$ \* c; d" c6 M- * Time: 23:00
; V; H# s4 ?6 a8 ?' E: M, l# n1 P - 0 F5 L+ U: c M5 w
- */require_once "./qrcode/phpqrcode.php";/**
' W. W, k# m, Z$ c4 w5 }
# h+ k5 B5 O2 M6 K/ Q- * 生成电子签名
( v5 E9 W0 a& y3 z7 N `+ b
$ D, l4 ]+ E3 A V- S7 E- * PS;使用微信扫描二维码/ f3 |% R: h# E/ \. t, o1 Q q1 G; N
0 }, H' S: v, ?- */$content = 'BEGIN:VCARD' . "\n";//起始标志& r5 D9 Z# L9 T$ ^
+ @, R: M6 R, W7 T+ p: T- $content .= 'VERSION:2.1' . "\n";//当前版本& {( @$ \) F9 Q
( l p& f" {% i2 f5 g1 `& [- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名9 u& L6 `: m5 {4 \5 ?
- $ J+ o; d0 O @5 h8 d: ]; G
- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称
1 O) I& l1 d5 U
# Q) I: z7 G0 H* S& T- $content .= 'TITLE:PHP研发程序员' . "\n";//职位
) i' t/ ]' ]" r( v- j% i - 2 n3 G. I8 K S# w
- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话
$ o! q0 z2 O. j) {1 e - * _, X% `0 e0 ?4 ?, p" j9 V
- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址
- A. y4 y) I' j* W: P5 P' h) d
5 d8 G& q, Q3 c- ?. Y- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)
3 Y4 z5 t* O' j7 f) X" W5 ^5 C' Y. t
7 v Q( a- S2 J( `8 |+ K! X1 y- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话! t" r; L, l) w+ Y( G
! O, _ Q8 m6 b& K- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱
& ^+ ^& w" T% d
$ x6 i( J& x" L3 m% S+ [6 F/ _- $content .= 'URL:www.baidu.com' . "\n";//个人主页
j" S8 e1 {9 R+ l6 f# o: Y9 V
: s; W d. Y: o- n( F7 o5 k H& t* |- $content .= 'END:VCARD' . "\n";//结束标志
3 Q1 \+ q. C4 r( M, A% R6 l
: @1 L2 L! u3 V' C u) U- QRcode::png($content);0 Y4 c3 h) X9 z5 J
" p c/ w8 D" A6 y$ T* d: R
5 t' x' T5 f2 {* o
复制代码 ! |3 [- }2 J' X) K1 ^- s+ Z4 s! y8 w
相关文章推荐:% v% _# g0 B {; E
1.PHP生成微信二维码实例: Q( S9 L% w: f. K
2.php网址转换生成二维码
9 i: w: q" Z( ]相关视频推荐:
6 {7 D: }( X$ W- s' \0 }+ b1.独孤九贱(4)_PHP视频教程# D z8 M2 N9 M3 _3 C0 ^- U
二、JQUERY生成QR CODE7 E7 h5 J2 Q# O$ [
源码地址:https://github.com/jeromeetienne/jquery-qrcode
( c' t2 u& V* N7 n4 R
; R9 g4 n' L$ K& p0 W. O6 w" L: Ijquery_create.php
" d5 {% Q4 ]& I! T; [- k' ^- q% N9 Z% |( O, X& V3 R3 H
- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码 " R" E1 }# Q" a) z8 Y" m
三、PHP识别二维码
+ u* r m7 q; ~6 }1、方法一' t2 Y# v1 d- {0 M* U
环境需求,安装如下扩展" i' f+ z8 ~5 A+ Y; V
- ImageMagick
, {& Q; G! u) r4 N- zbar
- X3 F; n8 E& ~+ E- php-zbarcode
! S) M) P" E# m( Y) B$ s. v2 _: G) O! z- i8 v% B
2、方法二6 u9 B+ e: T1 n! l8 |
PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以
5 _* |3 M' Z2 T( L- G6 m+ wqrReader类:https://github.com/baagee/php_QrReader7 v) i& r: h# L7 F, [ a3 W* M- O
# o$ |! A0 z6 w7 k9 \
; {6 k2 N& i8 w* P6 }- $qrcode = new QrReader('./test_logo.png'); //图片路径* b8 W/ c' ?3 J- ]
, \5 U/ a* k9 F- $text = $qrcode->text(); //返回识别后的文本8 z. ~3 f6 F; V6 a; j
) V; h6 ?$ F: j6 m k/ P& E- echo $text;5 f! ]( X0 {1 X) ~. ]' p
- # b" k$ G. o' E/ z+ ^+ d
, H$ Y( c/ K* Z1 a( Q2 P7 R" }
复制代码 . G- @7 w! X& b/ Q Q2 A
链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y79 u& E$ x/ Q2 `. ]! [) l3 M
" D! P2 j5 ? y% l, H" F2 v' `& _8 e! _9 `' g& Y) |9 A
) ?% ~$ J& b6 j- N$ F" H. M: r+ W6 R9 S% z
; W+ [8 l, z, D7 U, [. i* G" Q, K
* d7 @9 G- ^! W# P
9 N7 h/ d# C; P2 y4 H
' T. T6 c* g& b: N3 o% ^; S( q" o; E4 E6 d7 I' a4 K, o( r
|
|