管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。; j1 g1 L0 q, E7 R: [! Y2 S# X
---------------------------------------------------------------------------------------------------' S1 M' x; d6 k5 m2 r
二维码的分类
6 w/ {5 X& m2 k线性堆叠式二维码; C' I3 Z3 Y$ E* e5 N( }; j6 l
6 M& S2 C- q! }矩阵式二维码
2 T' k$ E8 }; `; ] U+ C2 _0 A* l% M# a$ N# v$ S$ P" }9 d! N! g
二维码的优缺点
4 t" F/ U) K! H5 e N优点
7 {% N3 e& y. V2 A8 l& Q* P信息容量大/ D! i8 F4 K4 H% a
( k- H8 [' R3 ^5 a* k$ o8 ?编码范围广
8 j) R% d* z5 x% a# i& ?2 Q3 q7 j& @2 p
容错能力强
) L7 J) j% N8 |7 C6 }, R2 T3 i: m. Y
译码可靠性高' e0 r6 b6 a% i! ~1 ^
4 ~( |" E7 y1 r4 e# E
可引入加密措施
9 h0 k$ b5 k8 T. w3 d" u& G
7 X: q$ x) g+ ^* B7 q/ v成本低,易制作: K5 N% ]$ D+ p# h8 x: ?
% i, y& y4 W9 k0 c; X& g5 b& S缺点9 t7 T1 G9 n% ]. F- [' u
二维码技术成为手机病毒、钓鱼网站传播的新渠道
R6 P8 }0 f' i! U1 U. k+ Q" ]! g! I& I. l% k8 t9 S' |
信息泄密7 e. q7 b6 F" _* K$ {1 h. W
% {+ J2 }2 n3 {" }' f目前流行的三大国际标准
9 A- y' i/ Q7 W9 ZPDF417:不支持中文
. s, r( U* P( u, k2 ^& ~1 O9 u' D1 ~7 S) B# I( u" [, M
DM:专利未公开,需支付专利费用
2 s5 [" ^6 ?9 p: q' ~1 t2 z( b# M* o3 W) u
QR CODE:专利公开,支持中文1 b* {& q o) {6 i
% V* v3 S- ]8 T& s
QR CODE 纠错能力1 u/ M8 O- G8 [; d' V+ {
L级:约可纠错7%的数据码字3 `' D9 s) b) a! r
& w. w' F: s( {M级:约可纠错15%的数据码字2 P: `8 _( l8 c% h
/ r6 s& k' r" k- i! {( K
Q级:约可纠错25%的数据码字
- g: H [5 r4 D
) T/ I: r2 p- ^0 YH级:约可纠错30%的数据码字( f, _5 G+ q& f& P- {
# }, c9 Z& p+ E! ] W% j1 _
前提条件1 ]4 t/ k! U4 ]0 p3 j, A
GD库
0 V1 U! |! b' U% d1 S9 s; r0 W- H
$ @5 q$ l) W/ K s/ E5 }: F2 m一、PHP生成QR CODE
& U& v, ] L' r1 J; \# O" O1 K官网:http://phpqrcode.sourceforge.net/
9 Q. Z, h/ r0 H8 D: N. I' ]6 S$ _# @9 A, z+ ?% w, V7 P5 f/ A
下载源码:https://github.com/endroid/qr-code; O& _5 o' I; B7 ?( ?
0 {( q. ^, n/ w9 K Y+ D" F' E
目录结构
, X' I! s% A" P" V
7 e+ W+ ?- \; D% B
7 j/ G* c5 ^2 U7 a
1、qrcode_create.php
9 r+ j* D5 |! Y: ~ps:生成普通二维码
$ o: r, G9 Y0 y1 D- 6 [! U; |; M9 @& R9 G! {
- include_once "./qrcode/phpqrcode.php";/**
3 s/ D2 g8 v! \8 a9 } - # C# k/ {4 a5 u. i2 O
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径1 l3 S/ J/ u% H4 D @( Q
+ Q& M9 x0 c' M0 L( d- * 在浏览器上直接生成一个二维码(内容为abc)3 w+ k) c5 x) H6 C+ j2 e, f" |
7 O* b+ J l9 x3 u; N- */QRcode::png("abc");+ H/ D e# D( d/ {" A2 ?% c
- , Q3 u# m7 y% m) H W
- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**) c5 @6 n- L% n; c6 J
7 y2 F# j9 y9 G% u: v3 W- * 生成文件到本地
" K" Y& W0 [4 N, M
* X& ~* v/ j' w$ I; F2 J) T- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)0 j& J) m @# b- D. ^7 @% G7 Q" E
- F: j. ?% X b' k
- * PS:$saveandprint源码的p6参数做了修改
7 }- d( K4 R3 x7 f+ c
8 {8 o& p0 O& C$ n' H1 w1 Y- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);
$ a! g3 k/ S) @& ?8 H4 T
9 e+ S) Z+ P( e E7 u( k
4 {9 L& {0 `: A. L; _
复制代码
# D5 |# A) C) G6 I2 T0 D7 R2、qrcode_logo.php
3 w1 z( p* v, @. o; Ips:生成带Logo的二维码
* z+ K9 p8 h3 H [3 Z- /**$ `) o* y. l& F# r$ T* p
, E& ~! c) \6 ^9 k! f8 G- D9 B- * Created by PhpStorm.
1 _' N |* R( y7 e - 4 z z1 y* i9 @+ c; ~% I c2 m/ n
- * User: user
! f9 k1 Y/ ?- K- e# Z0 j ^ - ! {/ M: W W6 b5 r1 C
- * Date: 2018/8/16
; n( _1 q0 d! m9 b# q% [8 M2 t1 ^
: O8 E! @4 |7 a1 U- * Time: 10:43
" E! ?: a" H; D) T/ _ - , m$ W- X. ^; N) A/ B% [$ x* l4 l
- */include "./qrcode/phpqrcode.php";$txt = "测试内容";
" R1 o. H& J* Z, e$ r6 T' p - h3 H- X& c, X5 b
- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称
7 N: A W8 o0 i4 b) d$ n' G+ }
: o: {( r* z8 j, Y0 A- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是4 q! Y* _/ v) {0 |- n. y
( q& n1 O. L5 W( P- j- $margin = 2;//边距
' W- h" r' X& g7 x! C
) B+ u! G' \. K( C- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片
7 W: R& e$ X2 s4 h& e - 7 R; H7 d! a& H# j
- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){ ) v3 i! _# r! i( _/ P
" J- T$ d+ S! X1 I, T- $QR = $picPathAndName; //已经生成的原始二维码图8 H7 _' U# \; g" B+ L% Y
- 6 E- L& B1 J; b- a% y& B
- $Logo = './pic/logo.png';
+ Q# _% n2 K/ E o: a& V: D
. {& i- I9 n; }- $Logo_re = './pic/test_logo.png';
; p8 O4 J9 y, c9 m. h8 g& ~
. D9 O! Y1 F5 m- r% c- $QR = imagecreatefromstring(file_get_contents($QR));
7 \) N8 c: Z5 Q4 ]. k
4 T0 ~! Z/ [: A( P3 A7 g5 f7 z: p- {- $Logo = imagecreatefromstring(file_get_contents($Logo));
* I: S7 h! _) c; w1 O. L# r, }
$ Y2 S; y' z0 o/ b# C( q- $QR_width = imagesx($QR); //二维码图片宽度; M8 ~' y' d" F& s7 o6 K0 g5 \! O k
+ m/ T S1 T, r; Q" X- $QR_height = imagesy($QR); //二维码图片高度
9 j+ J% F0 B1 w( q5 Z/ I0 T/ e
+ a: d3 J0 u% M, v. G2 m% }3 P- $logo_width = imagesx($Logo); //logo图片宽度9 O' N( S' t# h- Z8 [
- U% B `3 a W0 e) l
- $logo_height = imagesy($Logo); //logo图片高度
+ m# ~2 ~2 y( w, x
8 v/ q7 y1 j u' O1 |/ u- v- $logo_qr_width = $QR_width / 5; 5 Q: |- h. [9 w: y5 k4 d
- 0 |6 |3 G# D! c& T' o- R
- $scale = $logo_width / $logo_qr_width; ; N/ w3 I8 E% }' e& ~% z
+ D6 ?8 H8 N. a2 J- $logo_qr_height = $logo_height / $scale; 9 S/ g7 ?% s2 t! j* ?8 |% y
8 A# s( e( \4 U6 ?: q; ] J- $from_width = ($QR_width - $logo_qr_width) / 2;% ~4 N7 }4 E6 t. l3 H7 Y" Q
9 y( }, V* n; g% Y9 U L- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height); ( t3 H8 `, u/ {3 y7 E( d
- ; I2 ^! J; M X, p
- //输出图片6 n0 |, m' R0 A1 f/ ?; s" E# c1 ]- _
$ Q9 n; e6 S0 w& U) I V- imagepng($QR, $Logo_re);/ \: C I. ~/ M" F
- " d H" M& z" b+ K
- }
) \" L! ^) D6 a" k6 T' q5 Q" ~ - ( d6 |% a- R' j, t8 ^
6 t; v* h: V' a% d: Y4 J
复制代码 3、qrcode_vcard.php (生成电子签名)
3 I; _* E) c0 \! c4 G7 p1 W. C4 D& Q# g2 \9 Z3 A2 J N
vCard格式:https://zh.wikipedia.org/wiki/VCard
' ^/ ~5 y4 J* w: x; }/ Q, k% x9 ]1 i! v3 `) A# _8 a
- & F+ q' o: G# h& n' M$ ^* e5 J! e
- * Created by PhpStorm.' [3 L, O" t9 ?% P6 O: a' w+ K
7 E$ ~. j0 Y$ }- * User: user$ K$ C! v8 a; ]8 z; a2 I( A
- & t I+ n, r# K- q* b
- * Date: 2018/8/15
" @5 }1 x- g6 { - ( E! `* L3 y. T0 n! m' _) O/ K
- * Time: 23:00
+ [6 E' O0 |& J7 w3 @ - 7 D1 L5 [6 e- a7 L) B
- */require_once "./qrcode/phpqrcode.php";/**
8 d* W! i5 C& l; O2 q - ; w: Y; f. t* s3 q6 y# U5 Z
- * 生成电子签名' b" }; O6 _" q- D8 Z
- / i% E' F1 W8 y9 J6 F
- * PS;使用微信扫描二维码. Z" P4 C6 S" m
4 P7 i# V7 \0 Y, f* n; u$ Y- */$content = 'BEGIN:VCARD' . "\n";//起始标志
% t* \& s$ G8 ?: U - ) N2 q0 e: c* K, b
- $content .= 'VERSION:2.1' . "\n";//当前版本
6 y# E! u2 k" U h
! D _# T1 F! }. B$ f$ l+ S7 {- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名 c* Y7 a; j$ v9 M1 F4 B8 b
, K D% Q) |5 p( V! n B- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称) p$ w0 c; `5 c. ^* o! Q7 |
- 0 w0 f; z- G( O
- $content .= 'TITLE:PHP研发程序员' . "\n";//职位" r8 X; p6 q3 h8 z/ ]0 j* b
& R2 i* L: \/ R( P- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话
; c/ \6 _$ C* j. d2 U6 P$ [ - 6 |( g0 n# A8 B( O5 T ~
- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址: a* z. R& H2 c# `1 A3 s$ m
: t+ i) V n$ o9 d' _! f* r! e- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)
" }7 r0 ]$ o) ]2 J6 c- Q& n3 \; R9 e9 H - ; `6 G/ [5 S- J- o* j
- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话
2 `+ Y* X( k" T3 s! ^8 Q& x& X - " U5 f: a, w. I! ^# c) S8 ^
- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱
: q: F8 G; y# p! M# c - 8 y+ W- g4 [0 D: I0 O: L2 `
- $content .= 'URL:www.baidu.com' . "\n";//个人主页
( ]+ |9 Q- J( I3 ?& v2 w - 3 M* Q8 Y& v, A: t- o
- $content .= 'END:VCARD' . "\n";//结束标志
+ s: Y( l u5 E: b. W, M3 N: i. u
3 d" c3 e* p4 i- QRcode::png($content);! T5 w6 W5 }% S" \1 l9 a
+ G* H0 H% j0 C- L7 W2 v
9 S: n, n) u' [# d! P' N$ R2 ^
复制代码 1 e0 ^0 E# Y0 D
相关文章推荐:
; C# i {4 a1 ]. U" T1.PHP生成微信二维码实例
1 u9 w: m8 o2 c2 N2.php网址转换生成二维码( W' Y% x+ I3 L
相关视频推荐:8 ~- |) v4 b5 z4 W
1.独孤九贱(4)_PHP视频教程' H, P7 N8 \/ s7 o3 w8 _4 F
二、JQUERY生成QR CODE4 k5 D0 l- D% U4 m3 A4 I
源码地址:https://github.com/jeromeetienne/jquery-qrcode
/ i9 S* Z2 W, j& A7 N6 m3 k' E! z8 i' D
jquery_create.php0 T7 w8 p9 H X H- H
4 h5 O2 } ~ e) e2 n- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码 ' q- k9 c4 r6 F7 ]3 r$ P
三、PHP识别二维码5 O% Y7 E5 t& S: x: F% b8 C
1、方法一 Z& v' ^, z. Z5 ^) r
环境需求,安装如下扩展8 u" @- E/ l. @7 H' T; \
- ImageMagick) r1 u& v# q3 |
- zbar4 x7 c$ C5 t | ]$ @
- php-zbarcode5 b. W2 m4 D% m5 H. m
1 a' y! P! Z- y9 H+ ?$ I2 g* b2、方法二
' Q L8 S- d6 j% N% W% C+ W6 r* tPHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以2 W4 l8 s/ z! [5 Q; j: Z
qrReader类:https://github.com/baagee/php_QrReader
# [! n- R# p8 A& v- z+ i& |, {1 C& a8 K0 L, b( @7 w
6 Y4 g2 a1 M' C" a! K' d$ y8 G$ i' @- $qrcode = new QrReader('./test_logo.png'); //图片路径8 P- P! I y+ g
1 W; E% j( `* D6 Q; s/ w& ]; Y* V3 G- $text = $qrcode->text(); //返回识别后的文本. [4 r% p b3 u& H! A2 v' R
- w3 j, {7 F7 I6 L
- echo $text;: s; s w( {, {
- - n" O8 }/ |0 [5 i2 a
- 4 c6 j/ J+ l$ T4 i' j# L
复制代码 3 i9 h2 c( h6 t2 g) Z& x! c& R1 j& F
链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7
) z& p; l9 v2 X: Q. T
& ^* t1 K) P: Z- a) `% q% P6 }$ l) N6 B
; _% u( h4 ~0 U# c
! z7 ?3 d7 r, @3 f( E2 q! x+ X0 s, A; A" C* L
# h+ B* J r/ Z0 B1 A
6 K* R" H+ F* ?7 u( h, R0 u
8 i2 Q. I- T# P: y. _! c
* g0 F2 n; ^8 y1 f9 r: i |
|