管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。: K" f, J) W5 v/ s. d D1 L" j: q
---------------------------------------------------------------------------------------------------' [' l* U( x5 ^) J
二维码的分类
4 I4 W- L7 f) g9 \. B, U, {线性堆叠式二维码9 B2 `" }7 L2 b# M4 t
# s2 V: }6 `1 Y% W$ f矩阵式二维码
1 d2 O, V# A4 z5 Q2 D: }2 \4 `) o
二维码的优缺点& e( \ M; Q# g
优点) R2 R9 Z+ K3 B, }- v/ p7 B( ?9 B; _' z
信息容量大' `0 n) |( @; F" ^# E
; V; p3 s: g0 n& X! o
编码范围广7 s X6 s- k6 F0 J% @) V2 q& D
& x& l, T; m- I) c g3 y2 j% V容错能力强' C) {/ a6 L+ v+ I! E, B
" H3 k& s( G' W, p0 Q译码可靠性高1 J% T3 w; e6 i4 F% X! q! |8 Z
1 Z! m7 b7 I9 c# }
可引入加密措施% e; n7 r* D8 e/ T. ?5 |
7 w* c8 o3 {; b' @1 e6 r成本低,易制作
9 o4 ]5 m! Y! q9 ]
8 T: B# ]2 k8 W: a缺点# x( ]3 V( l+ y* g4 N
二维码技术成为手机病毒、钓鱼网站传播的新渠道
& g+ b* i* ~1 d- M# k
1 ^& m& Y" ]0 b信息泄密
- u$ i# o- e! j; \; ?
) o; L9 N" }& h5 J8 A目前流行的三大国际标准
7 l( x3 Y" B0 d, P+ `PDF417:不支持中文
: `+ w- X; |4 b) @- m1 l7 n% O7 N# @$ C
DM:专利未公开,需支付专利费用
( F! t. @, r7 B1 C7 k0 ~' \ F, ^# ]; G' U) a4 D
QR CODE:专利公开,支持中文
: i! l& I" v( P3 ]4 @6 s: k+ a0 H
9 T( T; k1 E# tQR CODE 纠错能力- G+ [: ^% I* Z- }2 Q
L级:约可纠错7%的数据码字
[. o5 q) L, o3 F8 f6 k- Y- c6 c6 m2 s+ q1 i) F7 t; D* I
M级:约可纠错15%的数据码字
8 M0 [3 w% ?- E5 k
( y; m8 h8 H, H1 g; V3 t/ b2 x3 l: rQ级:约可纠错25%的数据码字
! T0 ?! t2 \. M* E' @. \0 [) |& G% y/ A% g' Q
H级:约可纠错30%的数据码字; q0 m4 j. Q$ I% n5 |5 E
* e* Y' |- p: F4 P, x& f5 _, r前提条件
2 `* }) e0 J3 {+ z- v+ u6 D: zGD库
$ s' `' F' [, ~7 h6 N# g( t4 y8 D% Y0 W; { C+ j
一、PHP生成QR CODE. l8 }9 u; @$ m& A5 M
官网:http://phpqrcode.sourceforge.net/ e/ r! V! k0 f' u- @& W, _
; Q0 F) x8 k4 Q
下载源码:https://github.com/endroid/qr-code; G" k. m9 k) H! v9 D, V
) ?" ]; P% K+ T7 i
目录结构
1 c- j" I2 D- R1 Y
* Z) {0 I6 h# ]
1 Q" x8 |7 e' F6 r1、qrcode_create.php
# B/ V. U U1 Jps:生成普通二维码
( V/ e; V$ E8 V; }1 V8 J9 ?
3 B) S: d9 I# y4 r& |' q- include_once "./qrcode/phpqrcode.php";/**
) A1 u# B) d) x5 D9 G
! a3 G6 w# _7 B; c( @& x- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径5 a$ p& l' m) A- P0 f; L( @9 Y
4 ~4 {: K% i/ V' [1 v) s5 \- * 在浏览器上直接生成一个二维码(内容为abc)
) B( Q' i, i/ m0 z/ p - " c* e+ i5 g1 r P$ F, K2 g# l# f8 N
- */QRcode::png("abc");& v' c. y. Z. r$ H6 ]: w2 y
- o! ]% B4 |9 M7 s, R" t) O
- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**+ U2 I( @" \! Q" E; w1 e5 ^
% L, B1 T0 {& c- * 生成文件到本地
2 y: Q. b% O. ]$ K+ q8 L - # S; r, K# v7 ~- h2 ?
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)9 }, Z( @& E9 x: y; g
- 2 x2 m# O. G9 T
- * PS:$saveandprint源码的p6参数做了修改
! ?* s+ | X* F/ [ A, X _7 k - , t; @ V" [# Y \
- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);
k# G3 g0 h6 ^* V' T
2 i7 Z& |! G( z2 k! Q+ s' R& @7 Q
9 A+ ^1 W, A& k1 h6 H: p- {% z
复制代码
* k$ O/ O1 z2 s @5 S f2、qrcode_logo.php
& L& K5 V- i6 c _1 V' fps:生成带Logo的二维码
8 u( g8 N% q0 C0 [: \- /**
7 T. k/ x5 h0 t6 j
2 T: Y; t c7 X0 D- * Created by PhpStorm.# [. g$ b. K& }0 c9 @" k, ?
1 ?6 `' l9 x2 Y- * User: user& n8 X `: D9 [+ @
% `; a: f# \/ Z* H t. [- * Date: 2018/8/16- k$ b, n. o/ E5 Y$ O5 L
- 4 R$ k, @: H7 f3 x9 g/ [2 w9 r) k
- * Time: 10:439 c4 ]0 E8 X0 C: G @9 C
- ^0 o! C Y. t# E0 n3 @# K9 |- */include "./qrcode/phpqrcode.php";$txt = "测试内容";- \6 b# S3 I1 g
4 Q: _4 w4 y4 `" c! w- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称7 B7 W7 P' Z; Q" l, j9 k# \
9 U# p4 O7 X3 O+ F+ G5 ^- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是
1 V3 c1 ?9 u d4 O. I
4 L/ N2 u2 ?0 e: S- $margin = 2;//边距 g7 { w2 A2 V5 `
- $ E' M( `" |* A* E
- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片
' l8 n% Z2 w/ v& I9 r5 [
3 ]3 ] I0 ^# G3 W4 m5 U1 ~8 n- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){
+ [/ `0 ^8 l0 T+ E) H' T9 F! M S) i
/ g, y3 Q" h; C1 U: t( W( o" @/ G- $QR = $picPathAndName; //已经生成的原始二维码图
" c s, R$ w9 a: |; c7 t0 s8 J
w7 n" t5 W( j: z" F- $Logo = './pic/logo.png'; , | |: y; V3 B# M3 |
- 6 T2 ]- C) |: a! T" u9 g
- $Logo_re = './pic/test_logo.png'; ' t6 L- w* k' T4 p3 q
- , r' n) B, B$ U" U
- $QR = imagecreatefromstring(file_get_contents($QR)); / M# |; ~* K9 n# j9 j9 O
4 V) ^% Y e- N$ k; N- $Logo = imagecreatefromstring(file_get_contents($Logo));
8 K4 O) N, p4 H/ Y' A. D+ n1 _5 L
' t6 A5 p" y& C. e- $QR_width = imagesx($QR); //二维码图片宽度
3 ^7 X+ x3 F) T# h x' ~9 B - $ z: d1 j9 s+ J% p
- $QR_height = imagesy($QR); //二维码图片高度
" Z# n4 {' @* A/ Q3 [) \$ n9 A) M
7 ~/ N: D% { x- $logo_width = imagesx($Logo); //logo图片宽度
: A! m: a/ o+ B5 N
. s8 E d+ i8 e# }) I- $logo_height = imagesy($Logo); //logo图片高度$ C1 K9 j6 D" t- U
- 3 K" H' }, n) v5 b/ E
- $logo_qr_width = $QR_width / 5;
# F1 K J" l8 h$ g - . C3 q) U( t3 b0 O! v: A( g) G$ T: |
- $scale = $logo_width / $logo_qr_width; * g* ^9 y( b/ v! F! x
- ( N' {- i5 d4 p" \8 e$ q2 G& ?
- $logo_qr_height = $logo_height / $scale; C; E4 L5 x; b m* ]5 Q
$ d, b7 }: x7 E* q* y- $from_width = ($QR_width - $logo_qr_width) / 2;" D k, o6 N8 n& m5 x2 }& V! G' f- D
: I6 D3 C! ? I- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height); # y3 ^, D/ X1 M( d n2 ?
- - Y6 F% g$ X1 y6 ~' ]0 o
- //输出图片 ~) o6 R y; j- `- _- k, z
" P. }) R5 d0 A# K9 F9 F. ?- imagepng($QR, $Logo_re);9 s1 G& N3 v0 I" p' n l
- # M% b6 n( ^% K/ w& s
- }
$ s4 ]5 X$ t; j5 r8 [ - % D: t- D8 n+ B M) ~
$ r. ?' Z9 v, s1 N
复制代码 3、qrcode_vcard.php (生成电子签名)* Q% ^7 M$ ?' g' m0 U# t& x
% R6 o3 i* g* U
vCard格式:https://zh.wikipedia.org/wiki/VCard
4 Y- G9 [' n6 F& q4 b7 C3 l
8 W8 d `7 ?+ x2 [: V2 ]2 U- 1 z0 Z! z# h3 \7 k3 I, F7 t
- * Created by PhpStorm.
/ w: \$ Y! J; b2 ?( s
- d4 w! i/ A8 M+ N0 I- * User: user" k& W" h* L/ _
- - T( S2 Q$ y! a- v3 x1 U% |
- * Date: 2018/8/15
$ g/ ]0 o% M% f7 j T/ D4 a
3 D4 t) _( |8 d' g5 u, ?- * Time: 23:006 K% b# ?+ e" D6 v
& T& N, b+ ]$ A( F* W- v8 e- */require_once "./qrcode/phpqrcode.php";/**, Y! T/ N4 u1 Y/ S5 T
* n S1 F Z# P# N2 I- F8 I- * 生成电子签名* R. V5 E+ v J z8 v/ D' X8 G
- , u7 L4 } D' S M
- * PS;使用微信扫描二维码
3 ]/ ^3 o9 g! S9 ~" ^+ c4 D - " p/ |* m( H m
- */$content = 'BEGIN:VCARD' . "\n";//起始标志
" l& e6 R8 F( K# b) y8 A; [- a3 ~
5 v, B$ W0 X0 p( W: {- $content .= 'VERSION:2.1' . "\n";//当前版本1 v4 X* \4 T G) b& Y
. v3 i( h+ v k% M: W$ ^- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名
, Z5 u `" M: o9 m. H) |4 V - 9 J: w. G0 p7 K+ D& I
- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称/ e/ l" @1 Q# D- L+ w' X8 t: g
( b N3 T) |/ P$ @# T0 y! v% |- $content .= 'TITLE:PHP研发程序员' . "\n";//职位
- R* K$ \- ~# ]2 s3 T3 F5 f! F - 1 y2 ?$ }, A& q- w! s
- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话
6 n3 I$ Y- o l# C - % V) q! N3 O" E9 U5 T1 I- m1 U" d
- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址
1 c: n' `& d2 c1 b# r, l3 P - ' D: A# I9 C' }' s( P
- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)+ X9 s5 n) b5 B" U/ X6 k
- X1 ~0 s5 t' T( l: b" ?- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话) |/ c2 ~; i9 ]9 P$ j1 H" ?- M/ Y
- # M. I5 G, R1 n1 t: p
- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱- v/ t3 G& K1 Z V8 B. E
+ h' f1 k" l3 E/ u9 N. P* R! d- $content .= 'URL:www.baidu.com' . "\n";//个人主页
# L0 W5 g6 P/ F6 s$ _5 u
; h2 D: e3 v& m4 i5 j3 J- $content .= 'END:VCARD' . "\n";//结束标志
5 T6 ^+ p+ ~. p2 H
* ?* Y0 B& S8 g; J- QRcode::png($content);1 N9 e, B" m% g t9 ^% _, v
- & q% [- h% ^0 C
- 7 k. n2 Z; k+ v& E9 f) f5 P
复制代码 4 ^5 X3 a0 g1 f6 J3 H
相关文章推荐:
. S3 f* `6 K) p& i1.PHP生成微信二维码实例: S* P. [) X# B5 j
2.php网址转换生成二维码" E8 i) y$ ]0 r' D6 p" Z
相关视频推荐: {- n4 v& H7 C2 Y
1.独孤九贱(4)_PHP视频教程
, B1 B4 u8 N; V/ L% |二、JQUERY生成QR CODE
3 J5 ~- T5 |( P& O源码地址:https://github.com/jeromeetienne/jquery-qrcode
0 x7 n( m4 E; R2 D: k5 j* @. f" S( B' x3 _# q
jquery_create.php1 Y* j6 Y( u* j- p9 J
+ m, `3 R$ y+ A
- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码 & F$ L$ O$ \1 c0 i ?
三、PHP识别二维码
7 |, B3 ]0 v; k- F+ k. X3 x1、方法一
* o" Z" q) q1 y环境需求,安装如下扩展
6 \% i( ?5 u# `2 ^- M! B- ImageMagick
( C Y: }2 G; m9 d- zbar
" F4 ?1 }! ^$ V) e- php-zbarcode
a! S! t4 i! S6 |; p
5 g' k5 {% K; E2、方法二2 [, X# @ k; S% ` F
PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以
3 D4 P. @. s7 N. l0 V( PqrReader类:https://github.com/baagee/php_QrReader) W6 }$ y" S+ u6 [6 l+ ]& v
7 A( Z& L" _, x* Y: _/ r2 n
- ) P/ E& i* b# m, p( ]
- $qrcode = new QrReader('./test_logo.png'); //图片路径
) J9 U0 l" K k$ M - ! j' u }* y5 a* ^# ?1 {/ X! L
- $text = $qrcode->text(); //返回识别后的文本
8 W. z! e4 L/ h1 E4 o; u0 j
# g8 g6 B& ~) }- echo $text;0 u# d5 s4 d) t' ^5 K6 f! M
- , L, f! ]+ d& b! A& s2 F
1 E% K% R, C+ i- a
复制代码 # S# P/ X$ D0 m1 F% B
链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y71 X$ J) K% J# R+ J8 t: `$ G* `* ]2 {
0 z5 W: H' R/ G1 z- c# o* A
) F/ X1 m4 @. o( I3 N/ z, |; r# M
: P8 V7 n, ]' G+ `# L% R: t0 l
7 @0 @7 Y6 E1 T( x9 Q4 ^) d0 B4 u9 x C/ ?
( @5 G+ Y6 i$ \/ q7 @$ V
: f( n, E j8 B" j+ A
! x1 M* `8 e0 g; {/ w. I$ R( a, H0 l1 L! q
|
|