管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
0 ~0 `/ h$ ?. z2 c* ^5 P5 ^& B2 q---------------------------------------------------------------------------------------------------
, p( D9 q3 j! G, M* U二维码的分类% a0 S k; O! [% E
线性堆叠式二维码
" Y5 w* o$ ?) g0 U2 `0 |( T3 X# t/ X o# U' ?& d; d
矩阵式二维码2 j- n1 l p* y4 y
. ^# V( T" S' C& I
二维码的优缺点
4 Y, `( l; o& D9 b8 C优点4 H8 [1 ]9 U& i! l, e* `- \
信息容量大: G0 V; }/ Q. g' U9 d
7 k+ g6 g% H( L7 L
编码范围广- Q3 z( U5 a% V$ j
5 p5 j T0 K* }7 `, b# D. M# n容错能力强
% E$ U$ j1 b% {. p3 K s& I) ?) [# E; u
译码可靠性高
) [( q* p$ R" u7 ]
2 V4 q% ^ b* m$ {可引入加密措施 ]7 Z) t1 _' q! P- D k
+ \; @6 X2 ~+ S) j8 f: r
成本低,易制作& A7 r5 [& Y# \( R
4 d$ `/ _+ w, E( _# ^缺点9 Z3 z$ J( X0 Z
二维码技术成为手机病毒、钓鱼网站传播的新渠道
9 R% u' a; y: b8 J7 a4 A4 {/ }# C' T5 f
信息泄密- b6 R5 X D' {/ {6 V0 @3 x
. r, _8 B# q. P+ `" p* e4 Y9 f* h
目前流行的三大国际标准6 }- [1 [! U0 n" z
PDF417:不支持中文9 B+ v% \% v2 U
. u3 w l3 r0 P; ^! Z
DM:专利未公开,需支付专利费用
3 s9 y: x4 U) Q- @- G+ \. f
0 {9 ], b5 O# aQR CODE:专利公开,支持中文, a& b. t6 c. L. g+ A- L* ^
% _' L( }- t! I) X7 hQR CODE 纠错能力1 p% u0 @- G! b6 e2 J
L级:约可纠错7%的数据码字
& S9 p6 I$ K- Z4 L! U4 j8 R& _6 W+ O" J
M级:约可纠错15%的数据码字! Q+ S# b; ~: L9 }3 [+ n4 r. @
E' q; O/ b2 ?. X0 @' B" VQ级:约可纠错25%的数据码字2 \1 Y& C$ C5 n% ?/ B
9 x( F" T0 \2 t' G2 p( ]! |" _
H级:约可纠错30%的数据码字
" k( v1 W2 d6 ]
1 W* Q9 C% D: [6 l9 }前提条件
% \7 v( ~/ k( I) W# IGD库
. A: z2 ]/ F: D3 B& j1 N% j% f; _8 Y3 v9 V/ f8 Z: N
一、PHP生成QR CODE% s8 a* W4 @3 x9 l5 H3 p! M6 J5 D
官网:http://phpqrcode.sourceforge.net/7 i5 e* N. w2 I: w6 C8 Q
: M9 m9 y4 U; v4 t7 v4 {下载源码:https://github.com/endroid/qr-code' @$ s3 p& b, l# U$ P j+ h; D+ V. z7 v
y3 e- ^- W9 G9 N9 F# |/ m
目录结构
( W) [! U% j. I5 p; v
[$ k6 g& A6 y% F& j! B+ K3 L& ^2 S
1、qrcode_create.php1 I$ X. o1 }1 E
ps:生成普通二维码6 q: P4 U/ U! a5 h! I, c8 H
- / z3 W: m3 W6 i# D4 a
- include_once "./qrcode/phpqrcode.php";/**
( |, a, k$ u2 R5 ]5 e
" R8 q% Z6 V4 b, q; i2 ~- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径
P$ i. O$ F4 @) z+ O, j3 O/ X
6 o$ ~2 a3 p) g7 K" a9 M6 v- * 在浏览器上直接生成一个二维码(内容为abc)
! E3 G" A8 f7 P d3 u* T, M* i - ( I L' b9 [( `& D, g3 ?
- */QRcode::png("abc");6 V, O- L: S2 H; e) c- ]
- + O. z+ E. b& x5 w+ q
- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**
" u/ Q; D$ G( F- K2 H0 j' r- D! _ - . E \& ^( W( A. t
- * 生成文件到本地
: c& ^8 V% G; _- j# j4 S# O - 9 ` I9 Y/ Q4 k* p# k i
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)* l, }; D' v, \" \( `% {! V
- 8 L- K9 e# E2 Y7 b/ c o8 ^
- * PS:$saveandprint源码的p6参数做了修改
I; u, ]0 E, j
+ [; Y# N) B) M) ]5 r- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);
/ A) ? S! b+ b' s4 J s0 s$ s' g
3 j2 s* _6 Q+ V8 G; x- 1 @9 h; @5 a" H" M& ?! y+ u
复制代码 8 P& Y8 a, [( y
2、qrcode_logo.php
# [ L- y* t9 @ h, lps:生成带Logo的二维码- : Z) Z/ G/ e, P. G% u* J7 v/ s
- /**' l. e4 h3 h( v" T4 ]+ o
- ! ^ C( R! V& p, @) G
- * Created by PhpStorm.
' r1 D7 Z0 @- K9 S5 j - 6 J; s6 M) c% l1 z" a U
- * User: user
. d* ^ C8 q2 t5 b
7 d& h/ ~' D: l" T4 v1 f- * Date: 2018/8/16
" i( b6 u! h$ B- |. f/ v, K
# ~7 A$ ?' N9 q* Z I8 s" r- * Time: 10:435 K) X/ K4 n9 G* p4 _! \
- $ K! D2 ~2 l5 @! K' P0 p$ Y) q
- */include "./qrcode/phpqrcode.php";$txt = "测试内容";& `2 k3 P" S$ K6 @* I
3 @0 y1 R2 X7 P' u, R- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称
4 u: Q' Z3 J1 ]$ ` J1 g4 S
! q: v/ f6 V" N, ?0 O- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是
) l, M& c+ x" l# u - " b0 B T' f) i
- $margin = 2;//边距
/ ]7 V7 q5 q Q: a, H" ` - ; r* g) e' K: Z( S0 z5 @4 `
- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片
4 y5 C& _9 V: q- _3 ~6 F
4 `+ D$ y- T0 k2 j* t9 b- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){
2 X D; K6 Y( K& D, a) j
+ ~/ R2 y9 {7 K. n4 |- $QR = $picPathAndName; //已经生成的原始二维码图' I! F- A, n9 S" _4 r
: f' \7 m3 R- Q* [- r- $Logo = './pic/logo.png'; 9 d3 q; C2 H, m1 V
! z, `7 j) F. f; Y3 ~! _- $Logo_re = './pic/test_logo.png';
1 I% \7 d# N1 x- k4 C
% g. O9 ^1 k" J8 _- i* G( T- $QR = imagecreatefromstring(file_get_contents($QR)); 4 w% |% }' J, M% m6 s! {3 M( d- c
- % Q% p( m, y1 u* g
- $Logo = imagecreatefromstring(file_get_contents($Logo));
+ w1 b: O; ] l6 M - ; s. c! _! N" W8 P% `$ C
- $QR_width = imagesx($QR); //二维码图片宽度: p1 W, |, ?# O; _7 l
. ^/ D* s/ Y a G9 _8 Y- N6 |- $QR_height = imagesy($QR); //二维码图片高度2 D& Y Y8 ]3 H( A
- # k/ |* K5 \! i8 r L
- $logo_width = imagesx($Logo); //logo图片宽度8 L3 |, {- W: D6 t0 D: z
3 n3 i6 u2 {3 U) G9 v, }+ o5 B- $logo_height = imagesy($Logo); //logo图片高度
4 p, }% }; ^! H% [ - 8 f5 `" M/ U- F* i, W
- $logo_qr_width = $QR_width / 5;
7 K! m) K# A6 p$ N: n/ e2 |$ W E - 8 w; _; ]2 E" H2 X
- $scale = $logo_width / $logo_qr_width;
# W4 l& J2 w- \ - ; t9 h( ~5 j0 ]' T* }7 w% I
- $logo_qr_height = $logo_height / $scale;
5 C7 S6 M7 l$ L( H& e
. t9 P. ]8 l% | ]- q8 \, ~- $from_width = ($QR_width - $logo_qr_width) / 2;
/ z' y5 h; ?9 [4 I" L% b
. l) e& d1 |0 q/ P! U$ z- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height); , m2 U8 c- M) u" x& d2 A, V
- * |' b7 g, O" J" q s# ^
- //输出图片( p% G- y7 X& ~+ z3 d4 e. b
4 b: F8 `- C% G8 [0 x8 S- imagepng($QR, $Logo_re);8 }0 t2 r- y( m" }- a0 r
) F$ @6 f( S# w9 Z. f- }; _. m$ g. Y+ S
+ W9 | l& r; W4 i' w8 [
) b6 n4 n" v$ Q2 b5 W. n' G: @
复制代码 3、qrcode_vcard.php (生成电子签名)
7 f' a0 }/ m) \! t7 h2 h- g- D7 c3 G: e2 l6 }* H# N
vCard格式:https://zh.wikipedia.org/wiki/VCard
) I, O: `4 C% K
( ~$ X( t* X+ h; y1 U; s- " {. z4 F$ U6 i" r4 I* ~* H
- * Created by PhpStorm.2 o' n G- F9 A+ a/ L% w
1 S: \. U. b/ ^# b* Z- * User: user! Q% S0 J$ K0 H
/ F6 s3 e" w. f- * Date: 2018/8/15
# h) i1 f' Q/ v3 q: p - 0 A6 l, x7 ^5 N
- * Time: 23:006 K3 V! `4 s# G7 d6 O
" J5 h- z2 [. w$ |, T- */require_once "./qrcode/phpqrcode.php";/**) b- G4 Z; x7 Z- `$ s2 J
- 5 j% @# [, g O+ M; v, a
- * 生成电子签名
( ]& e' T: y) W; t7 \' | K; C: W - ' I( T! C& m; y! B
- * PS;使用微信扫描二维码
, n0 H& N; ^3 [! e
8 x' Y$ B( o1 j0 _7 j( f- */$content = 'BEGIN:VCARD' . "\n";//起始标志1 Q6 H S- M3 Z9 S7 v
( E5 `% U3 e% n- |8 F3 X7 |- $content .= 'VERSION:2.1' . "\n";//当前版本
% x0 R8 L: _- t3 Q3 t* w+ a( I s/ O
7 ^) d, `+ I. ^+ b' H4 Z- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名' [* ^* ^; @. L* U$ x
- & |4 D% O }! ~; I5 h
- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称
3 j" H9 i. Y4 F- e/ @* T8 Y. j - , ^" E! Q' g- @3 V
- $content .= 'TITLE:PHP研发程序员' . "\n";//职位
5 y& [2 X0 t$ q0 ?
+ j$ x* f9 K" D: `- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话& T( B" ~& A" R. W, i: L
. @+ l& m( j+ b: t$ F- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址
! Q5 o! S2 t9 f1 I1 e: y
* x' H5 j1 k; b* j! I- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)0 w( ^! O8 G/ |/ `
- 3 D q' e/ c3 \+ I, c
- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话
8 d' c0 d6 t; v
( ^. ~2 d. ]# {- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱
$ M# L$ j/ |/ n. {/ G: w A4 ^: _
9 b1 W- A) a' h5 ~- _4 Y- $content .= 'URL:www.baidu.com' . "\n";//个人主页4 K: m+ T4 ~4 m1 d) c
- & J( |, z; O# l8 f0 W
- $content .= 'END:VCARD' . "\n";//结束标志 A3 ]( G S) c! ?- T- \
- * p3 l+ o) {6 V2 J7 Z! t* h2 E
- QRcode::png($content);
8 f% o: K* i' W( C% B* `" {4 B - ( |) h% U2 \" H! F6 B
- ' S# [) ~% g$ H4 C3 m" p. w
复制代码
, ?7 v' h# D' z1 D相关文章推荐:4 k* k# \/ a0 R. O/ o4 j5 N$ {
1.PHP生成微信二维码实例9 v/ @4 T0 a+ |. m( ~ S# A
2.php网址转换生成二维码
; z: s- r0 |0 e$ \) |相关视频推荐:
" N; a/ R9 L+ c% Y @+ e5 z1.独孤九贱(4)_PHP视频教程4 j. S# w2 g5 R n: X) U
二、JQUERY生成QR CODE
2 w- g0 K5 h" `2 G源码地址:https://github.com/jeromeetienne/jquery-qrcode
" n5 c# K" H' J& \
# x) j- r, H1 Pjquery_create.php0 I& `& a! |2 L3 i3 ?; ~# e Q
( Z: }% T l/ p9 P9 w- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码
! N4 v% a8 x. r/ I' V6 u1 F1 M三、PHP识别二维码1 [* R0 o" l2 i4 p; [4 Z5 |2 G" q
1、方法一# Z( b ^8 `6 Q& Q- k& U
环境需求,安装如下扩展
1 `- r4 }" v2 v# [4 |- ImageMagick; X+ @/ T! N' G0 {* V# Z- g7 Z, |3 a
- zbar4 `7 h, b- n1 ?5 D) u
- php-zbarcode o. n% Q2 P7 }% K; O! W" Y; b, s1 e9 i
) R+ o# @, n U7 k/ O
2、方法二
! ]4 ~" d; m3 U( o" C; C n/ ePHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以# s+ E4 f$ x5 }' w& g1 D4 P" R
qrReader类:https://github.com/baagee/php_QrReader. R5 v' z8 b; p; R
* P6 {3 ]6 m3 M7 b
4 G# A' @! y' O9 R( M5 ~- $qrcode = new QrReader('./test_logo.png'); //图片路径- p. E- `- u' I' |
- ! [" H9 B* J3 @! I5 r1 r
- $text = $qrcode->text(); //返回识别后的文本
+ q+ k! O/ h# |
9 M. J; G! {1 F8 \0 `$ Z% \- echo $text;4 w- M! m! ^# O4 T+ E: B
- / W/ ?- w% A9 R) X% J* d
' H7 I2 I" A$ t+ b( S0 B& u1 m# f1 }
复制代码
1 ~9 `; U- r' U% b% j$ f1 y( A链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7" }) S7 O U5 O) V* Z
. p' h* z7 |& [) c
5 i. w0 t X: q9 j; {% {4 ~: s) v z# A/ f
. T2 j( Q4 V2 a
! ~ V( D% m/ z3 _2 f0 _/ s5 P+ C3 p5 I+ Y( C/ f
0 h+ Z H* u3 d3 u$ H W
, z' O0 N# r. ? C+ O: ~
- f" i9 x" m. N |
|