管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
$ i. U9 X2 W. i' H5 s---------------------------------------------------------------------------------------------------4 B; x/ `: H+ b1 ~8 _$ m( ?
二维码的分类 O4 d. p! r/ D1 ]9 T
线性堆叠式二维码 m B& T# {: W( T( L/ g
' ~6 w2 H8 n/ {. a/ }1 y( P, T, p
矩阵式二维码# i( z, G1 m8 x' ]* y% ~) F3 i
/ ]9 ?& e( {" `$ C! M6 Y
二维码的优缺点6 Q0 W6 F: V1 t& ]: F G% u! X: x7 Y0 u
优点
! g. F7 E3 r+ T# N% _8 E信息容量大
g4 U! W- {( U7 Y5 @6 P: P* W+ h3 ~7 R9 J% q$ W
编码范围广
. A* K! r; ]1 t# `* \5 }' {# ?
5 R# g4 O' d1 @/ q# `& ]. K1 M8 C容错能力强4 f5 \( U5 l1 {0 H( @$ [& N m
3 g O) q2 g6 J/ j7 x/ Q
译码可靠性高
1 _/ W( a: J" R9 p9 I( _' I8 a, X1 w8 l
可引入加密措施( r: K/ {4 T% d
5 f$ |. F, P5 g! D4 h5 U0 _
成本低,易制作: ^/ F8 N. |% i- c
+ B; s: r0 `5 S/ A缺点
- x- z. [8 M1 ?; f. b二维码技术成为手机病毒、钓鱼网站传播的新渠道
+ d6 [# H/ M) j* e3 R2 Y" q
$ W! k% V @# l/ Y7 I信息泄密* M, `- O k W5 F M* W
6 G( t v1 t9 ~
目前流行的三大国际标准
' [( F3 q# \2 x a' K3 n* OPDF417:不支持中文* h: [$ Y% }9 L) l
) q/ h7 T' ]) p: N
DM:专利未公开,需支付专利费用8 Y+ L' B+ M9 N
. Y& L7 z; q+ I3 o& J
QR CODE:专利公开,支持中文
6 Z6 q$ c3 W8 @" Z) g. z; r( W N# q- ]1 ~- T
QR CODE 纠错能力" ]) K! ~) A( N$ k9 K* K
L级:约可纠错7%的数据码字
, w, \) J# p' @( L: F1 \7 ^* }8 w
/ ?8 H; J: z k. v- @: t+ j% y: jM级:约可纠错15%的数据码字
* F: H8 n4 n, E7 u+ z Z: O6 Q: W! n5 W7 s% E
Q级:约可纠错25%的数据码字/ S5 ~2 H0 |+ ]$ @' t! S5 V8 I
0 U! @( y& [3 v" C9 A# H. d0 vH级:约可纠错30%的数据码字
. I* P4 s$ _& \# j' J: B1 E4 d' Q2 s
前提条件 a; v& s0 Z: x
GD库
1 Q1 C6 z% p* {5 i* {4 H
, K- i4 `* T" G( p' ^! N4 C/ X一、PHP生成QR CODE
5 m2 k* v9 `4 l( y; j+ W, Q8 ?官网:http://phpqrcode.sourceforge.net/
' ]$ }/ h. ~( o' C( t
' ?4 K+ }# i0 B7 A$ w& S下载源码:https://github.com/endroid/qr-code
9 `. T- I3 V) {+ o$ o$ N1 \" k1 G+ I( b7 F4 o* c1 _2 K
目录结构
% Q9 Y! o% |% {
7 {7 Y# x+ W5 A! X, x
5 ^7 u2 q5 c; J" G% _
1、qrcode_create.php% j# m; {* c* z- @% V% X
ps:生成普通二维码
* p- a% m+ H6 Y5 P* h% l/ l- 9 G5 J; t, @1 C$ V7 W8 \
- include_once "./qrcode/phpqrcode.php";/**
5 Q6 e# p& p6 B
~1 u7 t& Q5 @' N- |- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径
9 ^( L7 C! z `: r& {/ P - 4 c* a1 G! A X7 _
- * 在浏览器上直接生成一个二维码(内容为abc)
2 @' M) v% @* D4 H i! [9 y2 H4 \5 c - 0 V4 y% w. F0 d4 N" C; {. l
- */QRcode::png("abc");% ~' i E! V" ?7 n H4 w
: @% m/ n$ h6 ^; v, ~* h! I- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**0 c P; u8 F7 l* x
5 d) n3 S# P1 N% I2 m0 }- * 生成文件到本地
6 v9 t: i4 U- r8 f/ a; ]6 r2 D1 Q
' e# C/ @, [# g9 i1 S1 c5 v- y% r- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)
" E8 s- p) B; x0 `- c2 n - 6 }- [/ A; q+ G, W6 g+ V3 r! i2 L" D$ `
- * PS:$saveandprint源码的p6参数做了修改5 D+ l: z+ v) B9 ?# i j6 j4 u' v
6 A# J, \% {+ v& ~6 Z& {- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);
$ ], @! I5 i) }2 e1 E8 {; o$ I- C7 c
0 d/ Z7 t9 Q: {: B
3 a) e7 K5 C9 T# A) |" ]- w+ F
复制代码 ) n9 r3 I& Y1 y& g2 c# X0 u
2、qrcode_logo.php
3 s. K( \( c4 ]# c- g7 nps:生成带Logo的二维码
9 j+ X" B* J# [$ t- /**& X D4 F, C* q/ Q
- 5 R; J0 F/ w3 q6 [
- * Created by PhpStorm.6 \1 T8 r2 }) {
( ^$ K) ]9 ^1 G- * User: user
6 r# w) \ ?2 ~3 A( ` - ) ~7 P0 K. c: p Z
- * Date: 2018/8/16
; d _: K8 y" [+ C4 a) j - % c( J& _$ ?) ]: ]
- * Time: 10:43
* P b6 K" T, a) Q6 P1 s w& q
- L% O: {$ d' L5 x! O2 g- */include "./qrcode/phpqrcode.php";$txt = "测试内容";9 o" p: s3 a( N6 A
1 k5 F2 q5 j- G0 e& e; G6 Y- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称 f3 z1 F9 u G5 v
- 2 Q) _; V7 x! r9 x% O: a8 U: U' q
- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是* c* Y) h( q2 R# r3 \
- u( p( {/ `' E/ A6 j6 v4 Z- $margin = 2;//边距
/ _& H/ U' j( Q7 f! T/ | - ! I+ u! E6 u9 _* W; f$ d' A
- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片, ^0 h) ?. h+ K: g- q( ?
- ) l3 o- A0 }* b7 `' }
- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){ # y9 B# r0 Q9 R7 {; Y" W
- # ?' r& W- E+ c$ B# ]& X
- $QR = $picPathAndName; //已经生成的原始二维码图5 t9 x9 J' z$ F5 n
0 S" ]! u% H1 `# s: ?- $Logo = './pic/logo.png'; 9 |/ l0 _6 M% s0 q5 U
6 I0 D. f, |2 d9 n) h4 e- $Logo_re = './pic/test_logo.png';
3 p. ^/ F$ v" ^) w8 f6 K- i+ L ^ - ! w+ R: ^; T' O: J0 `0 _7 N
- $QR = imagecreatefromstring(file_get_contents($QR));
: o* _( H# _" Q5 o' r - 3 |& s: H; c M3 S& U
- $Logo = imagecreatefromstring(file_get_contents($Logo));
) A9 S% a9 e7 V, W9 i1 M5 |" o
% w s% ?& {! w1 P- {- $QR_width = imagesx($QR); //二维码图片宽度8 O1 G9 G0 ?7 d# P+ r& }
- . |/ Y# P/ L1 M8 E/ C- ^+ U
- $QR_height = imagesy($QR); //二维码图片高度5 b) I* J" h% b# N' t
- 3 L- R7 y' G& P4 g
- $logo_width = imagesx($Logo); //logo图片宽度
& J8 d, O: E; X; B7 d6 ?0 j1 _
9 F$ y' L0 S w: K: N- $logo_height = imagesy($Logo); //logo图片高度# ]" h' V Y$ J1 q. ~- \. A* Q
6 L& V$ S: J% W2 Y- $logo_qr_width = $QR_width / 5;
8 X( V. `( S( Y - . d d1 J# g) ]7 {% Y/ ]! a3 p
- $scale = $logo_width / $logo_qr_width; & `& e' @( a$ T( i* P: J% l2 O
- 5 l8 t7 T9 y1 A& l8 k" p' L6 R
- $logo_qr_height = $logo_height / $scale; . I' F/ w5 g- E$ o% T e
6 h s8 A% i: y' Z0 p, F- $from_width = ($QR_width - $logo_qr_width) / 2;
1 R0 n" L* ~1 q8 r) X6 s+ `+ y h - ; ^0 m" m' _0 E3 ~
- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height); ; p. E& `& k+ I" f/ M
- ( @6 u) s% e# t& O8 p; }7 [2 M
- //输出图片$ T8 V) C+ y* p, Q# t8 y, x
9 d$ A1 \ o( K' A1 F# o+ t$ c- imagepng($QR, $Logo_re);, o1 y" C) U0 u. `7 r, O* _7 M
- ; \- Q/ i. d4 F0 @
- }
2 L3 d6 X' r) F4 M1 K
3 m$ O U/ {2 h- A7 D: F' h& X
A+ [4 y! o2 }) |/ C8 Z
复制代码 3、qrcode_vcard.php (生成电子签名)
' Z% v, y% P! J4 n% P6 w7 u4 i% N7 A1 A1 Q
vCard格式:https://zh.wikipedia.org/wiki/VCard
* }" z6 A! R4 a1 t: `
, X% H6 o! q _6 ?& I
" q% o H- Z+ k8 R5 @- * Created by PhpStorm.9 j" K" L5 d/ ?* a3 U0 I. F7 _
- r( T5 D2 H% y1 m# @& i& J- * User: user6 Q- Y0 N8 ?" x+ o* F) N- s
; k* l/ [$ U% [: y! L% \0 }- * Date: 2018/8/15/ ^/ a7 t8 ?6 q* h' e- P/ C
& `3 o/ G% W8 Z I2 m+ M- * Time: 23:00+ Z: I; f4 a. w/ I' v D1 P- q6 \; h
- * |7 p- B6 n1 C# q' R
- */require_once "./qrcode/phpqrcode.php";/**4 r& ?2 A" g3 m! i4 s* u2 s
- * B2 I ]" O, M# Z; q: O, o n9 A. V3 H
- * 生成电子签名
6 s( }: \3 _" @8 f9 U# {
' F) R8 ^. ^6 I0 H$ J8 `8 r. F- * PS;使用微信扫描二维码
8 f. B6 f' {2 X' f2 z: m( x
9 N5 l q$ q8 h/ k. O& P+ X- */$content = 'BEGIN:VCARD' . "\n";//起始标志3 C. _1 Y/ y4 [6 {
/ I# _; w. ?8 X+ l" y- $content .= 'VERSION:2.1' . "\n";//当前版本
4 }3 q- v5 g+ f9 a4 q ]1 z( J& x - - \/ M7 E6 J+ H# v& X
- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名
# [5 b2 h. k! w3 \( I: r - $ l! L5 N+ R7 G0 @5 t& ]
- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称
3 p9 o# n( w: j$ h+ E - 9 I8 V. k8 ?) e
- $content .= 'TITLE:PHP研发程序员' . "\n";//职位
) s. b0 M: F8 h* s' K( a5 L - : o$ c+ c* ~4 [# d6 n& H
- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话
( J4 w6 E+ Y( k; E8 i G( n, m - % K* P n% k3 `
- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址* |! e0 ^/ V) o7 ^
& M3 F" a- Y4 ?4 u- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)& O/ P5 ]7 s7 G0 d3 T b. y/ x
/ {' ]3 ^2 w1 e, G- W' o. E/ i: r- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话
$ k# X2 G4 @4 C# `2 h+ ~
% H1 ^) u* e. H- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱
! j8 Z9 O4 M0 W! i9 t0 D6 I - * H, {( b r& [% T1 D7 B
- $content .= 'URL:www.baidu.com' . "\n";//个人主页5 r5 L0 g8 R3 L! t- Y
- % \! q) g \" u; O! n4 `7 Q @
- $content .= 'END:VCARD' . "\n";//结束标志
( F6 m( J3 j4 W2 [4 s( E: S
* ^4 u) e% c6 h* w8 U5 U- QRcode::png($content);2 h* g# m: v. E/ n7 W2 B5 l4 D
, T. f- W, m' L) e: W! B. b( _+ U
/ F7 I0 `# W7 C4 P
复制代码 ; b, ~; g) T# X7 z6 M) V: b1 f
相关文章推荐:- G; C" y. f- [" M8 e+ h6 t K. C
1.PHP生成微信二维码实例
; _9 D6 a' v3 Q1 K2.php网址转换生成二维码
* T/ s8 @; z& V% P: a: V9 ^相关视频推荐:+ X# o8 z1 z: }5 Y x+ W" o6 m& m
1.独孤九贱(4)_PHP视频教程4 x9 ]8 e9 z7 N9 p' E( {4 W- d
二、JQUERY生成QR CODE2 g, J0 D8 ]4 u, c; b( Y
源码地址:https://github.com/jeromeetienne/jquery-qrcode) c, a$ ?0 [, _' w9 i$ D
3 K* F5 e! s1 F: u" C
jquery_create.php
8 ^- q, s9 @3 Y8 v- T3 V
/ D$ a8 v5 @# j+ T' m+ }1 q- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码 , K' l6 @3 O0 {+ [" E" a8 o( L$ k3 K
三、PHP识别二维码& v! U' J- o) z4 L
1、方法一9 n7 i8 k) p0 l1 m4 J" g% Q8 T! s: X
环境需求,安装如下扩展
* t+ x. ^9 a2 g# y- ImageMagick E @( m+ ]* k3 @8 c
- zbar6 |7 c4 S9 d9 \2 w& U( k. u) D
- php-zbarcode
! e; c! n) P0 S* z7 A( d
[7 `+ G! M( r# N2、方法二' l( m3 @( Q1 ?1 {( Y! H" @
PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以/ W3 a) g t; _& T) r/ ^
qrReader类:https://github.com/baagee/php_QrReader& K& d% [) @* Z, J0 A# k/ G0 B- O
- J) G/ E/ `) F. t4 y) Q9 R
6 C5 t( E. h# z! F- $qrcode = new QrReader('./test_logo.png'); //图片路径
, Q' {( k) B" _7 H$ @, W' J2 ^' W
: ^4 a) J# l/ F- $text = $qrcode->text(); //返回识别后的文本
1 F/ V+ }( g* m1 I" ? - ; S, b E- \' ?- b
- echo $text;
+ L( m) C% I1 f5 _: e. F" x1 e$ `
! C. I& {9 u8 x7 i0 q- H9 \& t* X
5 J4 J4 u% k! c# r$ ?8 i- C
复制代码
+ P% Z- q( v; h0 r链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7; X6 d: N) Q/ A9 J
/ m# }% a! L4 Y" i) N# _% }6 {
3 f! ~- l3 a" p% i% ?5 E5 l* \
7 u j" Y* ~8 U0 q- d# i/ d& D/ [$ Q* V/ r/ ~
- @8 ^6 U( O0 u4 N/ g% z
6 T5 E3 O, c+ ~' p
! r# P8 ?. g& p$ ]
9 V8 M8 }- q+ M/ I: C' m
8 ?! Z; I/ M: d& M
|
|