管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。# d% {5 t0 z, ~9 C. u& T3 ]) F
---------------------------------------------------------------------------------------------------
; n/ F/ |% t. i; a! Q" C: ]二维码的分类
: M2 I: d' g3 W8 b. C2 k! H& p线性堆叠式二维码' K4 P0 q- a6 W. X8 Y
" O k G8 N! Q2 W7 y
矩阵式二维码/ `) J8 O6 V0 V N7 I
/ J! a7 D0 n, S$ [- [0 p& A
二维码的优缺点
. E4 V, |) B: R$ n h优点& @) }3 l% V9 d% b7 ^, A! y
信息容量大8 E4 G; n) {$ E+ `( h3 m( n$ w
9 `2 X- e$ t1 s2 y编码范围广
/ C6 ], j5 Y% r) k7 {. k3 u8 C
* n8 g }. {+ r容错能力强
4 I; t1 z4 w4 x& h
* i* B9 z. ~6 A b译码可靠性高6 ~# l1 A* X9 W' H- e( P
# }9 M) }9 g" v9 J3 B6 Y, [可引入加密措施
" Y4 J) v" z1 H3 U2 p y
% G; {7 b% j6 g4 Y, H成本低,易制作$ T# T/ C3 w# G% q! J" }
* Y2 U2 J1 }5 c% z1 B1 S( a; V缺点/ S. m& E2 B8 O
二维码技术成为手机病毒、钓鱼网站传播的新渠道3 D/ N* E7 E# B q" s0 u
u- k1 F- s8 A6 X: b- I }信息泄密$ Y, d9 N7 X' g w% Q& L0 N
. p. ^& \# ?, M! {# R9 f目前流行的三大国际标准
& }# w* o6 ]: n% DPDF417:不支持中文+ r& F- d5 _5 J: A! q
1 C2 V/ ?+ C4 \7 _
DM:专利未公开,需支付专利费用
0 c" Y7 V, M& p" H
$ W! ~9 G( z: MQR CODE:专利公开,支持中文
+ n6 l* w/ j+ o e% Q% k6 I, a" z' A! q+ h% e% f, h/ h: V) M+ x. z
QR CODE 纠错能力
" q$ w$ m$ N, A0 W) Y- r6 @9 nL级:约可纠错7%的数据码字
: m( y4 J* `2 C4 J8 E+ D
1 L( m% ?/ O7 O* F0 ^ Y2 r) ^M级:约可纠错15%的数据码字
9 g0 e/ w1 [* s3 h; m# X/ T5 [& R( q$ b9 L
Q级:约可纠错25%的数据码字
! y$ T, B4 t: b) l; h/ ?7 o4 i6 i" Y8 w: i
H级:约可纠错30%的数据码字
3 M8 q% z' U1 ~. S5 P2 ?) K, ?4 n4 R% h
前提条件
x8 P; c; C& M* YGD库
0 N# \& b2 o& S% T5 }
* ~4 P5 J8 E R6 f* y一、PHP生成QR CODE$ \/ Q' x, F; j" `+ ^) Q- C' I
官网:http://phpqrcode.sourceforge.net/1 ^# _/ P- e: U$ H. l& f7 Y- Y+ b) g
3 d" \% S( g* ?* {( y( y$ B
下载源码:https://github.com/endroid/qr-code3 ]- t, w# l. P: h& y3 J
1 s" z* f& g% n1 M' r; ?+ H8 @7 w
目录结构
: I0 i8 B0 b! ]8 b( W9 a
8 C* _7 t0 [7 Z1 F1 H
# C4 U- R4 J3 F1、qrcode_create.php
- r: J3 J$ x& eps:生成普通二维码
$ G" t, W3 X- _' ?# q/ ^- / j9 Y1 i( \2 j' Z
- include_once "./qrcode/phpqrcode.php";/**. `& C, z- o% Z& Z/ Z/ E; `7 s) x, B [
. w) [6 z" z6 \' [' l8 H- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径
3 ^& R" o H5 X" d4 D: B
; b5 l, E M O8 c, @' b/ g) C4 e- * 在浏览器上直接生成一个二维码(内容为abc)! ]5 Z8 l2 Q+ P' u4 H
- . E: h8 D1 s# a6 W) n! y: F
- */QRcode::png("abc");# y; S$ n4 P; {$ G
* \' q9 O- ^2 R! S4 w* g- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/** W2 [1 @( O0 s
9 q& }6 M7 J3 x# E- * 生成文件到本地
" ~" U7 ]; X# C B {' S% g' S - 5 j$ a- U+ l4 u) a5 B% b K
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印). K- \' |7 {9 b
$ P( x( p, ^2 d% a. U! i/ ?- * PS:$saveandprint源码的p6参数做了修改
7 Y5 X" P- }8 k8 ^( P: w$ w' l - ; q. N3 y2 r) I* U& k
- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);
0 i/ l- h' Y" |! N
: d+ a) a8 f2 }# U+ p! a
# k1 G0 e! N2 ~0 i" w& J8 F g
复制代码 4 Y1 @9 ]7 w4 j
2、qrcode_logo.php
: N, b l/ u* I J( Lps:生成带Logo的二维码- + X& d, ]5 r6 l. ]: V
- /**
% M/ _, S6 Y$ e6 p; T - 1 |4 V6 ^) ?3 [, `; c( ?. e
- * Created by PhpStorm.
5 @6 }7 w/ {* K& T* M
& H9 c9 e$ `" S; B4 [3 i a5 |9 X8 n& i- * User: user
- y1 L, P; W# H9 f3 ]$ W
: S' k2 w3 e: ~1 a- * Date: 2018/8/160 n7 m: E+ h* q4 K- B4 r7 t
! T) I' F6 Q( Q9 _4 j: p0 h- * Time: 10:43
, }, C" i6 y# I- q( @
1 F# X1 W7 D) U* J2 P- */include "./qrcode/phpqrcode.php";$txt = "测试内容";) L4 H* {/ @9 K& F4 s
3 c4 I- h H, q' t- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称: N8 ?4 X5 m; K! Z! n
# T6 i R' S9 D. _# k, [% a7 L- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是* P9 t4 f1 h" a1 T c0 A- i
- " _8 h+ s0 ^* m2 ?! c4 N
- $margin = 2;//边距" g5 p) `' \. H7 S& n A% U! P
* N# |+ Q* C: b. X- f, A! @3 S! B- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片" g0 A! h4 W, q1 d. I4 s
- " h g+ B- L8 {9 O4 C$ @
- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){ : t K5 G( N! n Q8 Y: K: Z' X
- 6 y5 T- s7 p! h5 M7 t$ f
- $QR = $picPathAndName; //已经生成的原始二维码图+ z2 ?) p l1 ` m% J w) L, J
+ b& [0 C& \3 r: P1 q- $Logo = './pic/logo.png'; 9 M# q* Y" l' j5 Q! R
- : {4 o# p. \) U. r# A: P
- $Logo_re = './pic/test_logo.png';
% y; e, ^, a# p3 f2 v, Q
& U% ?6 ?, ~6 U* o# m- $QR = imagecreatefromstring(file_get_contents($QR)); ' J1 B. U) F& B7 @
/ j$ [2 M! u9 N- $Logo = imagecreatefromstring(file_get_contents($Logo));
! _% f- q6 b* n
" w4 c( |: I( l- $QR_width = imagesx($QR); //二维码图片宽度% J, K5 }' V9 H/ o2 N
1 l- p9 k/ f$ I! S l1 K- $QR_height = imagesy($QR); //二维码图片高度
# q t- B0 d9 s |
: `! `8 w, C: z$ m) v( x$ y, _# a- $logo_width = imagesx($Logo); //logo图片宽度/ N7 | W& |; Q: O4 o
% n/ P, r0 \$ c( T- $logo_height = imagesy($Logo); //logo图片高度4 Q1 P1 A- \9 M3 g
- x# Z$ `3 h9 Y- e) w- $logo_qr_width = $QR_width / 5;
. v. ]1 ?; Z* t0 o: ^0 d7 P
5 P1 Q. _/ p* g2 B1 C, ]9 Q6 m+ z- $scale = $logo_width / $logo_qr_width; 4 h) d F$ Z$ Y" x! q
- 4 `. P$ x/ @9 Q% e0 v
- $logo_qr_height = $logo_height / $scale; $ u; Y4 R8 F3 _: M) B
) L) C3 Y) I( z$ w& `/ G. Z- $from_width = ($QR_width - $logo_qr_width) / 2;9 M5 b9 K! B- |" W6 Z8 n
- : ?7 D* k: _: J) U( F
- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height); 2 N Q+ M" J( }: f* D: i& ^
- # s: a: k% k) E8 O, q3 U7 @
- //输出图片4 K# |( O" V2 g. X2 [. o6 U5 W0 u
- / f) C- _, t& T0 j! w4 W: b
- imagepng($QR, $Logo_re); H3 t1 y* X/ ^) V
- ) D9 [( ]; C' E3 E8 C5 s- R
- }. f4 X/ ]) f9 A6 |+ s* I
7 }1 X5 E/ D* ]5 F
3 K$ T- @0 e2 m' M1 j
复制代码 3、qrcode_vcard.php (生成电子签名)$ E5 X! w( `( H8 y7 W9 I# d% p
$ \$ v [' t( uvCard格式:https://zh.wikipedia.org/wiki/VCard
$ Y( W; E6 L" B, } M; A
4 [3 {; J4 V" o$ r2 n' @, R# T. L- . j9 ]: ^' h3 y5 o% d
- * Created by PhpStorm.9 y7 K! w- @5 E/ ~' I% T! M- P# x
8 q, D( E0 J: Y6 h: R- * User: user# B4 E3 l- i1 I' [! ^2 i
- ) O; ^: @# ~0 P! Y
- * Date: 2018/8/158 w( d- p, g& n
' m) x1 C1 w- K h8 o- * Time: 23:00! ?9 b# V0 q$ q
1 Q0 U1 G: N R$ y. H- */require_once "./qrcode/phpqrcode.php";/**
, a; l* X. N+ Q6 M' \ - 8 s4 P! G, H3 n! C
- * 生成电子签名
& U* w) w* q% S; Q7 P8 x - ; X2 n8 Z. c$ m' ?' c8 E$ `
- * PS;使用微信扫描二维码
# ^/ V+ G8 n# ^
9 i: N9 ^; c) Q3 t( O- */$content = 'BEGIN:VCARD' . "\n";//起始标志0 c0 S) G. ^! K9 F/ |8 o, P
- ' b# l& t3 M: A# c
- $content .= 'VERSION:2.1' . "\n";//当前版本
9 ~! ]6 U% s p5 a/ N5 ]4 k - " q X3 F$ e, B3 L6 p# ~ y# c2 e9 h5 T
- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名/ }4 h8 b' T0 L% U4 W1 Q+ r! F
# s0 n5 t4 u: r- S# O+ O% ]- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称5 r- \! v) T: q* A; f
- 3 L0 S; Q/ P% v# X( N
- $content .= 'TITLE:PHP研发程序员' . "\n";//职位
1 y( w. O0 ^- v8 u1 N; z ]
+ f5 a0 E3 M' x; e0 ?* P1 j# [8 \- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话1 d @3 g! t0 u5 \
- 4 d2 A; {' Q1 R) M2 R8 e
- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址6 C% r! R! z: V Y: g( Y
- , x( P- V- b! Y& `$ {
- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)
5 K; j& {7 w( t& d9 S0 `: m( O
7 I0 d. w; f" L7 z8 A( Q, S& E- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话
; r, V$ f) m' \4 C - % X3 F( z! {2 t1 M2 _! t
- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱
, g& n# g( b3 [3 V6 e' l- R
$ u+ {4 e5 i4 R8 _2 Z. N: G+ m- $content .= 'URL:www.baidu.com' . "\n";//个人主页7 ?9 B d9 }" h6 w# U' N
1 v0 ]( s0 c& u7 ^* I7 T- $content .= 'END:VCARD' . "\n";//结束标志% m- v3 S* r8 d, t- v. Q+ k1 m
/ [8 d; `' f3 L3 V7 z+ i# _! p" e- QRcode::png($content);
2 x+ c8 v0 C. a. `- G! K - n! H- }8 K$ O8 a! G
$ V% ?& f7 T+ d/ i" l* V# y# m
复制代码 . X2 f3 J( [4 }2 r8 {! A
相关文章推荐:. [' J9 o7 L9 M
1.PHP生成微信二维码实例
, l6 @% z; y7 t6 b. P0 J$ x" b2.php网址转换生成二维码
0 J @8 B8 U; ~相关视频推荐:
1 N- ^# R1 p6 A1 ?1.独孤九贱(4)_PHP视频教程
) }6 b6 x2 Q/ N9 S9 l, g& o二、JQUERY生成QR CODE; A5 E( H5 D/ n. d1 s
源码地址:https://github.com/jeromeetienne/jquery-qrcode6 D- B: W- H6 E/ N7 H) R
) {5 `1 }; `+ R. |7 Pjquery_create.php' v K# I- V! R/ |6 w- D$ v; R
7 S: D2 Z: R, u" N: W6 W7 d
- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码 - D( d" A1 |- r0 A
三、PHP识别二维码
0 q) U2 J5 p( T5 g ?: c; [: e( S1、方法一
- H( y4 {0 i& y5 D环境需求,安装如下扩展
9 n4 A* G% O# z- ImageMagick+ \$ P' y" A5 C0 A6 A
- zbar* P( o8 _- p! f2 i
- php-zbarcode6 I# e% p, f) v* c# @
; j/ W! {- Y$ p9 C+ F6 s
2、方法二2 ] T7 X9 O! G6 {. y' J
PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以
( g7 D3 ` E n, g+ _" AqrReader类:https://github.com/baagee/php_QrReader
) j5 Z4 c% k8 W$ A4 L7 G- @4 h2 P: w4 f" }* u
- 2 V; J/ |. J$ |" [' c) c2 h) |* L, ~
- $qrcode = new QrReader('./test_logo.png'); //图片路径
8 T: t/ e& c9 I
' E( j! D# {' U- $text = $qrcode->text(); //返回识别后的文本% N, x; d) a. F9 q: P
- + h7 f- d) }6 \$ {& r( i
- echo $text;4 ?& }( ~0 v# M4 e. J
- 3 Y7 K4 E% T4 i$ {2 c( b
, d3 p. [ X: l7 Q
复制代码
# m8 u3 l4 `. P9 O h链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7% \# a$ O. i: h& ?1 C% v- n
; g Z- p! M' `# H$ k3 A2 v6 ?
& a1 Q$ \ y0 B/ S6 K- t! o. @( Z9 ^$ y2 I: Z, {
( b2 [$ ?8 _( S
9 W/ L8 h9 y) |9 ~! j$ i
! C( g9 F# P! H# W3 K" d- A" ^
5 x4 _* O' o/ m$ M- G- M/ c
4 M% H9 l3 U. ?- Y; w2 Y& H. b
* y% P5 \0 y' f9 r! g |
|