管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。# ]: K4 g. F4 _ |! r$ o' K2 U
---------------------------------------------------------------------------------------------------& n% q F7 u6 E, g9 k7 o) o: N
二维码的分类
6 o0 [( N) R8 N( C9 L线性堆叠式二维码
' A6 J2 P9 I) X0 O: f/ u. v5 p: ]/ V7 @3 j( V! w; k4 c
矩阵式二维码
% [ z7 Z s* C" z/ \+ O% f7 g3 W3 Z$ c: l+ z; Y0 x r A( [3 d
二维码的优缺点% _' {; \4 A/ ]" [8 s
优点5 K2 r/ n! @4 G4 V
信息容量大- |' g) {2 J1 Y( |9 C$ W/ k
5 x, k: }: E, u5 o; ]编码范围广- }+ d- t v- l( B; v/ p
, g6 L) O5 A; O) a6 l7 i容错能力强& V1 X u; n+ j |4 j$ ] S
4 K% u' C. L, g4 ^& C: |5 A, L9 h译码可靠性高( m% r" w0 w' w$ _+ H
( X$ R @4 b9 \. N! o# c可引入加密措施/ ]7 u: H' f- {3 G
6 ?# K9 f1 U; s5 I* ]! Q& q成本低,易制作
8 d6 R! r/ H4 ^# R- k
, k& M* L& W- ] U# R缺点5 f0 s( u" Q! }- |" B. X1 w" f! a
二维码技术成为手机病毒、钓鱼网站传播的新渠道, G) U9 m# s& ]
8 P; B2 w2 Y* d" c+ l/ A1 E
信息泄密% R) B# e0 t1 h( w- M- ]4 G
u- l3 a$ Q9 D. P$ d1 f
目前流行的三大国际标准
' [' j2 O3 Z2 I7 Y8 KPDF417:不支持中文
( ?; S; S2 b% j* c
4 l, R7 D# P& \DM:专利未公开,需支付专利费用
: |9 g* U" V0 M
4 x$ B9 C* W2 y( ?QR CODE:专利公开,支持中文
. J# \- s/ Y& ]( b8 n! ^0 b3 x# u* I2 n
QR CODE 纠错能力
3 P" O4 ~: n) q$ ~- [; R9 m* `L级:约可纠错7%的数据码字
5 k7 d2 V, C5 z8 n8 E. l" \5 p$ o. g' Z% |& @7 S. y
M级:约可纠错15%的数据码字
& A) m6 X4 F# i- E3 }1 a* m6 G' [
H0 o0 Z6 ^; {! |" p V3 G" ?Q级:约可纠错25%的数据码字/ B7 ?2 x; c8 J k. G+ Z7 N1 K* R9 ?
$ E0 ^. G" n) A2 P P' C1 MH级:约可纠错30%的数据码字
) [/ ^) }1 F* `( n5 M1 m
3 h0 X5 ~5 y1 v2 K前提条件
* I( Q( M* k" y5 u" g# o2 uGD库
, g$ D( V) @7 t
/ F- X2 R! O6 T( m9 l一、PHP生成QR CODE
) ^; |! `0 U( ]8 [官网:http://phpqrcode.sourceforge.net/
5 J' w" U7 o3 r! Y" D
+ ]: \& h6 O4 I; Y3 K# s下载源码:https://github.com/endroid/qr-code7 _& X) R- C' @' x( H0 j
. ?% L$ }# R: a$ t
目录结构, d, ?1 f1 F: ?2 r
* r$ e) V* n9 E4 g ]6 Z
2 J7 B% r6 R _; W n% b1、qrcode_create.php1 A' ^; p" C1 {
ps:生成普通二维码
5 T( h, H6 W8 t; G5 c- ' Q; Z( j4 {* N
- include_once "./qrcode/phpqrcode.php";/**
8 n3 E* x$ r+ [0 Y6 T
, A! f8 @; i+ s i9 e- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径+ A) ~3 |, H/ q! y
' r- A* |1 \1 x. C$ M5 p) F: b- * 在浏览器上直接生成一个二维码(内容为abc); a: U$ a* k( S8 r$ o4 z
* w2 @$ J: J$ Q% H3 [, X- */QRcode::png("abc");# \3 V$ }. x% T( _" B7 D8 e O
- 8 w0 ^& V8 [8 x
- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**
0 k4 r$ {7 M4 r - " X; l- g |6 V+ _' U0 _4 F& _
- * 生成文件到本地
/ @ S! q @9 Y' i, h2 H* E
' w: t% g4 d) N$ K% k: M# j- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印): _; c' Z% z A
! e" R% B8 h! m& p2 G- * PS:$saveandprint源码的p6参数做了修改" C9 k: ~! s4 ?$ N* x
- : T z' s9 N/ t! r# y8 h: n5 f% s
- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);
9 C* E G% q' x% h. V. @ P- g6 q$ R - 4 V1 S* `" M4 P5 O# w* \
- & T- f4 K) x; m1 F7 q' p
复制代码 . |0 h' k, X/ M, S5 G$ p' [# N
2、qrcode_logo.php9 H6 I& ^4 @/ _) v" R4 |4 {5 E
ps:生成带Logo的二维码- ! h) i! Y8 n" z; Y; j/ Q. G
- /**
" b: Q. M) D: C* K* c - + b7 \2 m1 f# A7 r, M0 h) _# P- ?
- * Created by PhpStorm.
& B2 B. z, [. C/ N: F1 M
2 G& D* t/ O A: h |! |, ^- * User: user# K0 r5 I0 H' b& l( p+ v8 [7 ]
- ! O9 W+ m$ G3 |4 O! j$ _
- * Date: 2018/8/16
3 E+ j! m7 U ` - 2 G& W6 }4 {. g- W+ @; Y
- * Time: 10:432 h' k% p* j% W! A" y0 C, v
- 1 _/ @$ \4 c( l' }; i4 q
- */include "./qrcode/phpqrcode.php";$txt = "测试内容";5 P- b% W* w) n' B9 L
9 f; k+ a$ M+ @ u8 {# c& v- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称
# r# ~: A8 B; z1 J Q - 7 A$ z' Q2 H* w: Y8 H" g( p
- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是
( L7 k, M/ I L5 o
9 p% Y- ~0 v- p; F* _( I' w- $margin = 2;//边距
1 `( F1 T$ F' y# g0 i* X' h - " O- B. y. C+ F, I; T+ Y
- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片; d5 x8 R- h# y- J8 o5 i! R
' k4 }1 |) D; Z- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){
* L" \ h+ y6 T n5 i - / i7 C9 C, X! E2 W* ]/ V6 C
- $QR = $picPathAndName; //已经生成的原始二维码图
8 t E1 `2 s5 h- F8 v
, d- S1 U5 S# R. a- $Logo = './pic/logo.png';
1 U4 g0 p1 m( i) @ - * l+ d4 |$ d* R6 g/ ? D; {
- $Logo_re = './pic/test_logo.png';
7 B& j0 j' g: k8 K - ' J$ |1 _6 R+ J6 u' d$ _! r! w
- $QR = imagecreatefromstring(file_get_contents($QR));
1 H" y8 U- a* s8 p8 f - / m* {9 r$ [5 Y* V) F, v
- $Logo = imagecreatefromstring(file_get_contents($Logo)); ( K4 _) a/ f+ w; [' H3 Z! |
* P; A- x0 K4 P2 I$ I7 J, E# I [- $QR_width = imagesx($QR); //二维码图片宽度
, I5 {0 }; s/ ]2 n+ B, M - % Z/ ~) j% D. s% h% X4 ^: R3 F
- $QR_height = imagesy($QR); //二维码图片高度" k% q! \; o' X8 n3 f8 w: _8 I. B
& m$ w" P( H1 r- $logo_width = imagesx($Logo); //logo图片宽度* S: Q" t7 L* S$ U& h
- 8 L+ Y" b- b/ }! |1 l k4 Z: L
- $logo_height = imagesy($Logo); //logo图片高度
9 Q/ X& m. z- g0 p y+ T( h - - h& c+ ~: |( \& p8 O* D
- $logo_qr_width = $QR_width / 5;
) K# x. ?1 ?, Z$ K" ^: E
& e1 F9 ^5 t% W" a( c* d' Z. y- $scale = $logo_width / $logo_qr_width; 0 Y# c# \5 c$ Z$ A* \" l
( S/ h% v& |& T* i) K2 u" k- $logo_qr_height = $logo_height / $scale;
; j0 l5 Y6 ?7 G/ N* ?7 `: E
9 [4 }: I! s& |* }- $from_width = ($QR_width - $logo_qr_width) / 2;
. [8 H2 G7 k. p( N) L7 z
; H& @6 Z2 X- [- V4 m. t- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height); ' Z: p& K( z$ f! o
* E! s4 N- w8 v# w3 ?- //输出图片- B2 l/ y2 m. J, n
2 o5 \- x* K2 R: W& G8 T- imagepng($QR, $Logo_re);, V [9 Z r$ ]. `0 a' C
. O$ y" u6 r$ r6 p P- ?- }
% V% l u3 |( }; i u+ J
$ E V$ H, L3 A! Q$ i) }
" v) q8 ]" b9 v9 \! {2 U! d
复制代码 3、qrcode_vcard.php (生成电子签名)2 \4 A8 ?0 u* b7 ^- }0 ^% H( d
' f# z0 w i. h: q* }
vCard格式:https://zh.wikipedia.org/wiki/VCard# }- j) p2 D# o
: y" Q% F4 L" h# F- : u" e% H* m( c0 }1 b4 E; |
- * Created by PhpStorm.5 C4 ~) `7 X! X6 l
& Q2 k1 j1 t9 e+ o- * User: user
/ X) z# E+ T2 N4 n" G5 a - 8 u/ W$ M+ `' Q9 x* L
- * Date: 2018/8/15
; l: o# R* w0 m/ ` M - % ]$ K' C" A) X3 Q6 f
- * Time: 23:005 ^) {7 M8 f" E3 `( `$ h; f& D
7 I( i9 Y: t5 i, D( ]) K' U- r+ {- */require_once "./qrcode/phpqrcode.php";/**. a( z( X$ E; m1 T9 A; M
0 Z* G# [: \ v- * 生成电子签名
' s3 v4 X% s T8 A4 b0 Y% Y( O
6 O! c- o3 D {3 D' t9 C- X- * PS;使用微信扫描二维码 \+ a& e& d Z7 Q2 Y) X) m- l
- , h4 ^5 J" g1 d2 A- S+ K
- */$content = 'BEGIN:VCARD' . "\n";//起始标志2 }) D) k5 \9 ?% t7 Q% Z; s
8 j% h7 t) W2 J. P6 f- $content .= 'VERSION:2.1' . "\n";//当前版本0 [3 L" _& Q h8 C
7 O; g3 A$ K# r0 s5 g- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名
7 {. [; l8 R m( ^2 m& @0 U7 b! S; p - , t z# L0 Y8 O" Y# ^4 v! a) ]
- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称$ o1 S' d; }# _* Y% G
- 9 l5 w F5 _5 n( K9 c2 }0 u
- $content .= 'TITLE:PHP研发程序员' . "\n";//职位
2 w4 O1 v; Z; X" Y- C" O$ T - ) W7 A/ H7 q; I; \9 c4 }
- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话+ A; d0 _5 f' N+ A# l- @( |0 j2 Y
- h& o) A; I1 v; t: K- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址& A E1 `5 d: Q
- / B' ?" m/ c$ l) \& t$ P
- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)* N3 C* y1 `# o2 |0 c7 }0 ^2 k
- ]% z* m. ^9 s- U6 ~4 K- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话, Z7 J) R5 n# q/ k
_# c9 s. b; a3 I1 F2 r- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱" J' ]0 S/ {" ?1 L3 W
- B+ \7 a$ e* N0 D, O9 p- $content .= 'URL:www.baidu.com' . "\n";//个人主页; V3 n* b9 n% Z/ s8 t
- % w8 ^4 Q0 i0 }+ ], n! B
- $content .= 'END:VCARD' . "\n";//结束标志
+ K! ^" X/ d% }
( ]# |3 u# k% E- K& P- QRcode::png($content);
5 `6 ]6 `! Q' m6 g: h
3 Z$ }$ f4 M8 ?+ W6 d" W0 {5 y
) I7 d- v2 F$ q, P! N
复制代码
' T, c, M2 S7 o相关文章推荐:
) h. [4 d5 U) r1 T# Z$ k; `: ?1.PHP生成微信二维码实例
% Z) f0 k; D# O! ?+ E2.php网址转换生成二维码# e8 l. o( y5 Z2 F( y
相关视频推荐:' J u5 r) u! D8 d! @
1.独孤九贱(4)_PHP视频教程' d5 [3 e' `6 X# b( e
二、JQUERY生成QR CODE" d- C% p. w9 y0 x0 @4 L
源码地址:https://github.com/jeromeetienne/jquery-qrcode
. {0 O$ X1 \ x5 U
8 ?, Z$ I9 q; `3 |% u7 d' ljquery_create.php
8 S9 m! ~5 q' u% B( \; t6 X+ t
- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码 0 @# T/ f+ `9 a0 w0 L$ Y* f* h
三、PHP识别二维码
% a$ Q. t8 F- r7 D; E- \1、方法一
0 B8 Y! F1 m! [环境需求,安装如下扩展
9 w0 w3 C z8 R1 X: T/ a- ImageMagick
0 y1 C% g+ u* |9 X1 _- zbar/ f! i* m4 ?, F4 h) p& @
- php-zbarcode
! [. F+ n: S4 A) z P4 `) X
8 v: @& j% O6 A" J, Z2、方法二3 ]5 Y: s: V1 v: |; z m
PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以1 X4 L* |. d; x8 m4 J# w
qrReader类:https://github.com/baagee/php_QrReader0 Q$ T' b& W( t+ k' p
; M5 Y0 o% M0 P" R
- 2 d# W4 l% u( Q# b* o0 u$ p- \' w
- $qrcode = new QrReader('./test_logo.png'); //图片路径% M: V) I {& y' `* X" R
+ c% r/ ^4 u1 I7 i3 e5 O- $text = $qrcode->text(); //返回识别后的文本
" O6 K. ^, S- O/ r- Y `: C
+ H# P- ?" d% A& E7 g- echo $text;
$ j/ Q# q) b4 F) E% k) K' ] - ( ^7 ~9 Y0 h/ S& F
- & Z& Y& T5 P$ T. M5 \
复制代码
4 I! \( \2 x! T4 w5 _! y链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7
; r8 N6 K/ u, f( A" t6 [6 A* S, u Q; F5 H
' A0 s& `+ E7 u `
* r* }4 r/ K( z2 v4 x h; `8 n
- f& Y* p4 S- l% R( D/ n' A( [; k5 y- {6 I: \( C$ ?" ]8 `
8 S' ]: M( ^; z, Y L# u9 ~" }: E8 A
% `% L( a$ \4 v7 R: ]4 M) v" z" F
|
|