管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
* d- u. C9 q" n: [' i---------------------------------------------------------------------------------------------------& D8 H5 h- U# F+ d2 D& b) R
二维码的分类9 g5 s, j; y# p/ _
线性堆叠式二维码
( G' T8 }$ z: T2 {/ I0 W; J- S: U# b2 i) c8 n, j( q- o8 q
矩阵式二维码; _, f/ Y: [: ^" L: c
4 R' V; K! ?; G& {9 z- z
二维码的优缺点
4 |7 Z! n5 ~, r( V# z) n优点8 h1 @1 u- n0 _( B2 V
信息容量大
- F/ g9 C+ b. D5 i
' @8 f( D6 [' Q3 r3 w5 O) @编码范围广. j. G0 f8 ~' S c6 W. u# }
; Z8 X' s: F" o5 j0 M容错能力强
, _8 L+ e5 \! y% L* B8 e% ]( P f7 d* n0 Z" M& u
译码可靠性高1 F4 q9 t9 q* P
4 C; M: d, x! \; e$ w/ V可引入加密措施
( [1 I A: M) X ?5 b! v( e% @3 O% |, Q
成本低,易制作: r# w5 A1 q$ f9 K& a
$ z; [/ A0 O1 m0 D- h: H缺点
* v# x( D2 i2 T& ^! v2 M二维码技术成为手机病毒、钓鱼网站传播的新渠道5 s4 A6 }0 v, e& x; y
G% x b8 O; n6 {$ |
信息泄密5 G8 a/ o+ B7 r& m6 v
( _/ a( x1 g8 r: ^3 g% y9 B目前流行的三大国际标准
/ ^) {9 a* G+ g) d6 N$ oPDF417:不支持中文; t9 U, r9 I% M/ i
0 ^! p5 Q0 Z r7 H) |DM:专利未公开,需支付专利费用 K3 s5 b1 |7 f3 ]
' Z9 e A$ _* \
QR CODE:专利公开,支持中文
4 T) X- x$ V7 W% O0 {
, C9 z9 R; f. t% @1 bQR CODE 纠错能力
6 F! k( F! a3 Z3 e7 v* ?; dL级:约可纠错7%的数据码字
+ V( ~9 ?( e I& |. y% y) A8 _: o4 @9 o% w% R; V4 }% Y# {% s/ e2 U
M级:约可纠错15%的数据码字# C# S5 P$ e- Q; f; r$ K1 O
, s$ U l( G3 T g+ l' ], k
Q级:约可纠错25%的数据码字
$ P. Q/ i! w8 p+ K9 v' E& V! H' k% \* I. J6 f0 x0 w# |# O
H级:约可纠错30%的数据码字
K1 a$ Q+ ?' B( `: d% U1 q3 n2 V0 _2 ?; f" j( {
前提条件
. G2 P# T7 w: ?* aGD库1 k* `5 g: |+ F% ~
4 h3 u1 z6 Y. B$ ]* w" h0 ?
一、PHP生成QR CODE+ `( {& O6 ~1 _9 y- U
官网:http://phpqrcode.sourceforge.net/
8 v: b- R# X9 p: Y7 O0 p
" l- k3 F' ~8 Q! ?- z6 E2 i下载源码:https://github.com/endroid/qr-code p/ n* O }: }& H
6 t6 P- l) {" e, h4 U7 A8 m
目录结构" [9 K- D4 o& E6 x4 g& f! o
( n4 V( s9 }$ U9 \) U5 v0 e/ w8 D
1、qrcode_create.php2 G; w: S& M! b; o5 v$ K2 T
ps:生成普通二维码
+ I* B+ |7 j* r- M- : x" L) Y* Z) u; |, J
- include_once "./qrcode/phpqrcode.php";/**
0 h6 u# b' A8 Q- J' U p
% ~+ G( p" L* E3 p- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径9 t; ?3 p, S) G# Y0 s: |
- ) R2 Z2 ?6 T$ N( Q! i* |4 g& K
- * 在浏览器上直接生成一个二维码(内容为abc)
4 U9 B3 W8 D9 m4 C7 [1 r
1 x+ M% o+ M( T! {' k# b( I5 ^! W* ^- */QRcode::png("abc");
8 P; B/ f! P- X$ E/ [9 x. m - ! K6 a2 `1 N6 f5 }2 j1 V
- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**
" n) j& \. n) T
7 c5 d; H- `3 F9 V* f) u$ o- }- * 生成文件到本地' x# V3 O" ?9 F, a/ ^
% d+ M3 J' Q4 z/ _ D( F- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)
9 i g/ D o6 p
) S# ` m! P3 a, Y- * PS:$saveandprint源码的p6参数做了修改& U7 e* m, {' l$ Z( D
; S2 W( @3 C& |: w! ]. s- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);
* g0 S+ F6 ~6 X3 T - ! x4 {+ Y0 X' m5 a( J
3 K: }) E& f4 n0 R5 C9 i" R
复制代码 0 d/ F3 t- b, ~& ~
2、qrcode_logo.php
+ o: P. M- D9 Qps:生成带Logo的二维码
+ Q9 E- j# ^) a* _9 M/ \" r* n- /**
+ q/ s0 q/ b. t
2 h, g) S- n6 m- m5 k- * Created by PhpStorm.2 T4 F. b' y% g
m( f4 `7 n: G- T+ q/ K- * User: user
$ Z& K* X, }! G: D' u% U( X- y
$ j3 e6 S7 B$ ^) ?% `+ I- * Date: 2018/8/16/ Q# ^& }8 F( T- _* ]
- ' F; w4 Y& w+ i( J7 F
- * Time: 10:43
+ y7 Q3 [1 T0 h) q0 {4 ~& M. o/ H8 g - 6 k7 b+ {2 X" A' P
- */include "./qrcode/phpqrcode.php";$txt = "测试内容";
# F" ?2 j" @. h$ {. [' J
6 h4 ]8 G7 f: O( s( S4 g& v2 M, }- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称; @! M) x: l6 ^2 I0 z
- 3 P' z* I0 I6 c" X' G k9 y
- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是 Z0 @, ]' V& x9 ]
- 3 Y: b+ G! N' n1 h* \5 w) L
- $margin = 2;//边距6 k2 H& c6 q [( K' f
- + [; r. D2 X' v
- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片/ m0 E" x2 r# D3 s) p, {1 q
- 6 l' n3 Q- E+ P" P
- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){ ! k* O+ |; d. E
- : @; t5 D/ {9 f3 V D
- $QR = $picPathAndName; //已经生成的原始二维码图
/ G0 p0 L5 l7 {# Z/ Z6 \3 t
8 g# J2 M3 }" P/ Q$ G, f. H: f- $Logo = './pic/logo.png';
$ d' V1 `; s, A7 S - 7 Q& S, T4 V, T8 l; i
- $Logo_re = './pic/test_logo.png'; . @" u% R8 [ D0 U9 P3 X$ G. E
' I/ w; d" @2 _5 ]5 N; ?- $QR = imagecreatefromstring(file_get_contents($QR)); $ W* H8 b R9 U1 w* v; a j! ?4 i" z3 q
- 0 y* J* C) {. v
- $Logo = imagecreatefromstring(file_get_contents($Logo));
_$ H9 `9 b* E3 ^: Q* w# Y% Z
; R( _& d. ~. E- $QR_width = imagesx($QR); //二维码图片宽度
C+ l5 ]9 i7 M
2 Z. A H0 b. w3 R$ ~/ @7 B- $QR_height = imagesy($QR); //二维码图片高度3 U; _+ ~- c2 P5 z& @+ c. V& n
2 b0 c( g _+ h9 S- $logo_width = imagesx($Logo); //logo图片宽度
: L; |# {- X) T
# B" o& `; c M- $logo_height = imagesy($Logo); //logo图片高度* a& r% j8 }6 d8 J
- " @+ H) F0 j. p t$ b
- $logo_qr_width = $QR_width / 5; 4 G# G- Q5 a' l a
2 F; H# N' A" Q' F$ D* Y- $scale = $logo_width / $logo_qr_width;
! \0 }" K, Y% W" P4 Q/ a5 [) }4 b - + S6 T! ~! w# S0 {
- $logo_qr_height = $logo_height / $scale; 7 a; u* I8 L5 ]. c/ t( t
- 4 o3 z8 [ K6 O5 w- f
- $from_width = ($QR_width - $logo_qr_width) / 2;2 n. u J, ~( E# @0 E
; M# \* S; M7 a: i' j, G- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height); " H4 o$ s" g/ x8 X# E
; c9 M$ M7 `- D$ Z- //输出图片0 N+ x5 V6 }3 A0 @2 h& q* H
- ( ^7 r2 i) \4 x6 R7 D( W
- imagepng($QR, $Logo_re);" ?4 {/ ?" |, N. ^0 e5 t
y! g# \7 n) }2 j8 \- }
. k P v+ C" v$ f$ d d
/ h$ w5 F; a4 l/ l& |1 U3 Y
% h4 T) ]% a) M% {# j
复制代码 3、qrcode_vcard.php (生成电子签名)
$ o" L7 A( z( @! X8 J1 l4 y3 ?6 t6 p* l. A6 ^
vCard格式:https://zh.wikipedia.org/wiki/VCard8 p7 O m6 G# O4 o) E
9 X) a' j5 v F& J' d" T& v& p
) v6 |! z6 {+ O( G) e- * Created by PhpStorm.4 ]2 H) {! t7 J& P" Z- P* j
- $ O0 q. }/ Z6 v0 G
- * User: user
* n& q0 |* w$ }0 V# Q" ~* o/ K; J
( Q" f( \ N& v, ~0 J6 C3 T- * Date: 2018/8/15
2 }: {* ^& g k ^2 Z" U) n - & Y6 ~% f- ?5 [; Q1 i9 J4 I$ ^
- * Time: 23:00 G3 W+ `' x% ?: l- C4 m! }
: A- W1 E* U4 d# i: i$ c5 ~- */require_once "./qrcode/phpqrcode.php";/**
5 M5 V0 _- g8 K& K9 G- s# [" h - 7 k" G' }7 W, y7 J3 t
- * 生成电子签名% L" s; S) Z, Y( \7 \7 b1 v
- ( `0 U% P& C3 p) @, g
- * PS;使用微信扫描二维码
2 k8 N6 i" n. ?* n* Q8 \ \& U
! J5 i$ B8 c- F8 y1 q* Q- u4 u- */$content = 'BEGIN:VCARD' . "\n";//起始标志' b+ Y# d B. ^' W! q
- , X- W" W) m4 j k; D% A
- $content .= 'VERSION:2.1' . "\n";//当前版本
2 M* j7 S1 _7 p% |( Q; j
5 V4 D5 ^8 n+ f/ Y- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名4 c0 I% s' Z. z7 f d( x
- , o3 p: s- Y, R3 F8 F; i# x
- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称
7 i3 S% j3 I' o- l3 ^8 V5 | - 4 K1 N8 `% K3 E Y$ ~+ S' l8 t
- $content .= 'TITLE:PHP研发程序员' . "\n";//职位
& z) _' ?9 Q4 [1 I& U - , F5 O4 @- l- V: {5 x6 Z# ~
- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话
6 Q* O* B" F3 u; Z
) L K# n2 d w2 b# j+ N. c2 J1 y8 ^0 @' ~' I- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址: e' A" L2 k$ ^! _0 M* @9 O* l
6 E8 r. \* x9 t2 R( L( r r- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)
1 t4 L" \$ h) P' W, ?: G - . Q# g$ E- q4 I: O
- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话/ ]4 ~5 a% F1 `7 {
- * ^' j) I% t" }- d5 o
- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱% G3 P3 q" E* J, }6 i* ~
: T Y8 r* C% P6 w; _! ~4 x- $content .= 'URL:www.baidu.com' . "\n";//个人主页4 B, \8 R$ X) d9 W* C: ]: x6 U
# i. j% U4 b& w( r Y6 `# Q- $content .= 'END:VCARD' . "\n";//结束标志
# z* R4 r) E, L9 S( o7 T: I
: D1 ~. t. g% e' q- QRcode::png($content);2 Z! P% z; h% B4 r3 F
- ( y/ N7 Y& |* z9 U- V, u
7 ?9 W( m3 E2 ~: i
复制代码
0 |: J8 N+ z- | Z7 I9 \* S, d相关文章推荐:
3 s' z- F& ]: P' j+ |+ T+ G1.PHP生成微信二维码实例, d7 G. x. Z7 Z3 a" R
2.php网址转换生成二维码1 ]6 W* b/ o3 s+ S* A* U
相关视频推荐: S$ o- ]( ?; L1 U
1.独孤九贱(4)_PHP视频教程3 Q- Y; ?9 j1 l( \% j% X
二、JQUERY生成QR CODE
l5 r- ^& z" @1 o+ W0 C源码地址:https://github.com/jeromeetienne/jquery-qrcode. A8 Z) b* C* D7 f9 e
2 N: d# X' L. V4 E
jquery_create.php
) a0 M" @" f/ Q! C* c, p( I
+ H! m1 r+ I2 z5 N# U( j* U5 {- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码
. z; G2 X7 z0 k, z: l, ?7 ?三、PHP识别二维码
6 T5 N* Z" a1 U1、方法一
& M7 ? \/ C& Z环境需求,安装如下扩展
8 j X8 q* W; F3 F% B( H& `- ImageMagick
2 ?7 l% R: ?/ ^" Y1 J) Z: _- zbar
8 [- O# U# o' W1 A4 t2 a- php-zbarcode
* O- u/ i, ?7 ~3 o1 {5 A5 c' B
5 [, {* h2 b& ~2、方法二
! C8 O1 z# v, T( [5 uPHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以. G0 Z i5 U& O; }8 _5 w
qrReader类:https://github.com/baagee/php_QrReader
' s3 b1 b6 f: x8 L9 `8 ]
# s4 k/ b9 {: @6 c2 Z% j# o- 0 }# K0 D4 P) r1 n# u) R) N, j& l. z
- $qrcode = new QrReader('./test_logo.png'); //图片路径
9 l) r' r, O9 T' D2 g- A
1 s8 v1 Y: K6 W( i- $text = $qrcode->text(); //返回识别后的文本5 r3 |* S4 }- }# V2 A
- 9 K7 z7 e! h2 E, ]
- echo $text;
$ K. f0 R5 a T$ u7 D% y - 3 p `3 {) ]! L! b3 [
- + e& [! V6 O# v: \# @; ?9 k
复制代码
( m! A/ H d0 f链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7 }4 S+ h/ ?8 G" ^( |
& w5 \) i* M9 ~5 i; H7 J/ ?2 O V
' G3 c( H/ y: [! v* B
8 e9 r& k3 e! P) B
3 G2 U# [! f) g C
/ I0 \6 M+ a U% l- ]6 U3 y; e) L
4 U3 f$ G0 p! _$ a
, ?: R, y: S/ F6 ^: t% m# u( g
|
|