管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。3 J) w+ r& J* } q
---------------------------------------------------------------------------------------------------% _7 X7 [; L& s& v+ ]) \
二维码的分类5 b9 O! O1 P; c* B/ ?, I) t
线性堆叠式二维码% K/ N9 F& r! E5 e
8 a* G2 b& }2 y" Z) o$ z0 N矩阵式二维码2 f* ]; m1 w3 e9 `# B' B0 N
9 f/ }& b: H* f8 d0 [, h二维码的优缺点% J$ T! W! E+ |/ F) `2 l, O8 U- s
优点
# Y- h6 Y" A/ D/ D0 V% E/ t' m信息容量大1 B: E& c! {( @3 B
+ d2 e+ G$ F) L& Y5 |/ X) Z编码范围广
( ~5 Y, ` M8 i; R) o: H1 y; R9 M
容错能力强
) D8 B: m- y5 S; P4 ~0 e% o3 i
" i. C w# g; o; M, r! i. | N译码可靠性高
+ H2 U: ^) ~: O/ b' f
5 M1 D1 ^* A0 J$ F/ g可引入加密措施
0 _7 n( W+ ~! }0 q" V$ P. t
, |6 h- V) N* L' T/ ]. p& W4 [成本低,易制作
/ c! H, \! n3 V7 h) c& C% q" K- W" _$ |, m
缺点+ V9 k; a3 G1 ]4 s# Q2 _
二维码技术成为手机病毒、钓鱼网站传播的新渠道- O! L- }. ~! e" D/ P3 j
6 f% w4 V' w- U4 S8 c1 S信息泄密* _# B8 {/ R% c8 V; _7 O
0 f& p: Q, c8 L+ _4 i% V. L
目前流行的三大国际标准
V. M. s4 F% p6 q1 }3 IPDF417:不支持中文6 O# I3 V; z: z9 j7 u- ^
5 p" ]* I5 Y9 _: T6 D# o
DM:专利未公开,需支付专利费用) x, |1 E k4 _2 _4 m4 W
; t W7 ?, ?2 h6 |/ WQR CODE:专利公开,支持中文2 ~& ?7 s9 g( }: H# P3 L/ n$ k( r
: \( I: T( G- c" }QR CODE 纠错能力5 w* {5 O9 I7 O
L级:约可纠错7%的数据码字
% M B/ i( C1 k6 b/ O( J% ~: [5 P2 c1 Q' f( Y3 a
M级:约可纠错15%的数据码字
% r% I' i; `7 e9 x% _, M) P7 N. A4 K( {
Q级:约可纠错25%的数据码字
" j1 @! y! V4 v! h/ S0 ~% |# T* Q6 G( T/ \3 S A6 `) r) z
H级:约可纠错30%的数据码字
- y& W$ v, C- w' W8 I4 R& Q! s& u) s; _; w; f E6 {
前提条件$ N+ z: R5 ~) A' G; R5 q
GD库
' @; T, ?" L: H1 c8 r' \' n4 Q) V$ U
一、PHP生成QR CODE3 Q4 f; |" `, J* A/ r5 J
官网:http://phpqrcode.sourceforge.net/
( q9 O3 J# a' C" j0 u+ I0 L% J' y+ g: a; D. u
下载源码:https://github.com/endroid/qr-code
`$ |2 E7 d( `# N
; J) [ H$ e% } p目录结构
4 A5 l* i" d* n+ R3 v) B
9 b; W' D6 a8 b, T! t( ]( d, c/ Z0 E u; G* O t2 V
1、qrcode_create.php
3 F- r9 F' Y& ^3 L1 G: |ps:生成普通二维码
8 s# v5 f9 t# C! W0 ~+ @- H
2 z: F5 \1 X8 T' w t5 r- F+ k- include_once "./qrcode/phpqrcode.php";/**
2 G, j9 O7 s0 u" g - / L1 ~& u0 l; o+ X
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径# M& b2 f# {2 S7 u* V* W2 s
- ! j) _5 a4 a1 E- m$ y, `
- * 在浏览器上直接生成一个二维码(内容为abc), i3 L4 }* [& ]" t: U- B6 C
3 _ F" G' ^% h. L5 v$ O6 c- */QRcode::png("abc");1 K1 }9 K! o8 O' |
1 @# l$ w4 K4 x9 O3 [+ ^0 L- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**
: y0 e) X! N' z6 x8 ^; K2 b6 c
9 |2 k- k' z( q1 ^: O4 D- * 生成文件到本地
! a. s0 E8 h/ }) B1 m - ( X9 I! D, r/ C% g0 W; e
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)$ H* D5 c+ ^' I* {
- 4 o' Y' p: l2 e. P' z) T
- * PS:$saveandprint源码的p6参数做了修改* k! s2 x; M' R- a
- 6 B/ _4 o: U+ N
- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);
U S+ u- w: \" c+ k3 d- h# W
& C5 A9 C+ L& c+ |* k! f/ \1 d: d- 2 E& p/ A$ y8 d: p7 @# Y" m1 h
复制代码 4 A9 [5 j3 h% _9 z# M
2、qrcode_logo.php
9 p/ o- w/ l3 w0 |9 \ps:生成带Logo的二维码
" |9 E: k& J& z$ J- /**: L& c& J2 T6 D6 a7 k
7 M% N, m! m9 _1 t! A% e0 l- D" n- * Created by PhpStorm.1 [2 B, b a% W7 |5 W4 V) c
2 U* y# t1 M7 s) `" j- * User: user$ Q+ K' {/ e; L8 n
2 f4 B$ w+ S) b- * Date: 2018/8/16
7 o1 o1 ^; r4 [0 N1 Z- ?. B. c+ h - - T9 x( R# |# c" O0 B% ?. O3 r
- * Time: 10:43
$ n- |7 f4 {# M" O% i - 4 f M1 {( ]- }- A; p
- */include "./qrcode/phpqrcode.php";$txt = "测试内容";
$ Z& g) I/ Y8 y* u+ n1 F" V3 Y
! ] }: W7 }1 ~$ T2 X' D/ Z: n8 u" `- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称8 a9 O% a' t- {, j0 w4 f
% D9 z& Z7 m: Y6 Z" D8 [- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是 m5 C2 e& j5 h' p7 W
: d8 ^& O; t- l I* q0 h4 j- $margin = 2;//边距% w0 k1 ^+ l* }; F1 G0 _% P
G% Z# Z! h5 r' F `+ z- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片
6 G t' M; @% Y2 a- _0 S& ], W - $ @7 z/ G0 o4 J% M% @
- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){
. [+ f1 p$ [' M: u# \
: B# Y+ a3 ?% ]: l- $QR = $picPathAndName; //已经生成的原始二维码图2 h1 V9 \5 f1 y: ^$ I8 R2 N
5 d- |/ j* d3 v7 r* k- t: M- $Logo = './pic/logo.png';
' f( t: `" J% R/ E$ M* b' e8 A
f- Y( Y* u& D5 I; P9 ]5 u- $Logo_re = './pic/test_logo.png';
: T! {6 d# `- e c" F. Z
4 [8 J" ` a$ _7 k4 C! I- $QR = imagecreatefromstring(file_get_contents($QR)); / ]. k/ Q/ s- |; c
- O. P7 I. k/ d2 p- $Logo = imagecreatefromstring(file_get_contents($Logo));
( `4 P* \9 q% j4 k3 f0 m0 o - ( F" U: y3 U' r- U
- $QR_width = imagesx($QR); //二维码图片宽度# e* w: B$ H( @1 D: H
- ' h' N) y2 C1 H5 ]0 t5 g. `
- $QR_height = imagesy($QR); //二维码图片高度! [, E; q) l, P0 M& s8 L
- 3 l; K! H5 |" B8 e2 S3 Y4 j
- $logo_width = imagesx($Logo); //logo图片宽度 d" l9 g& x% d9 i7 H% K- m
, b9 w' i+ x; ]' A- $logo_height = imagesy($Logo); //logo图片高度+ N2 F8 O" }( ]/ c& m1 S
. S( }8 ?1 h* ~$ f- $logo_qr_width = $QR_width / 5;
- {3 i4 J: K7 d- E - ; v& L3 I7 h& p1 _
- $scale = $logo_width / $logo_qr_width; # v% U3 ?' s; s8 O. _. M5 B5 i2 \
" u+ j, ^0 |8 Y$ y# X- $logo_qr_height = $logo_height / $scale;
. w3 n( `# u' W: o - 3 C- b: i) D6 c' `+ K
- $from_width = ($QR_width - $logo_qr_width) / 2;3 M2 Y2 F4 l d3 Y- M
- 8 K+ j- K. f2 O, F2 U+ G2 A
- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height); : _ P3 \+ I( ~7 E- V8 Q" t/ t
- % N! l$ v5 M! I0 F$ M% u
- //输出图片
& e# m0 K. o2 T: `% G& |' [ - , @' O0 k9 A2 I
- imagepng($QR, $Logo_re);0 S2 r) {3 V' G: Y) z/ g& p
' K6 C8 |! s& z+ h2 T, o- }7 e) {# N( |1 Y1 ? c
- " f9 r% S3 b6 F! P& y
& p6 X5 S9 A- J3 S; }2 P! ^
复制代码 3、qrcode_vcard.php (生成电子签名)
$ {) [- E. t8 O6 r
2 a' H) u$ b4 {vCard格式:https://zh.wikipedia.org/wiki/VCard
' x5 b3 B7 p+ t2 G1 ~6 K" M9 R0 K3 b d0 q* M) z n
$ W, X8 _3 I. S" A+ q- * Created by PhpStorm.4 |6 w& t7 J* ^# T. s
7 w6 u' ~# h0 o3 x$ h- z- * User: user
' K) D) C' C, N3 k( B0 z3 Z4 U
& D! ^1 O2 C. B- c4 v- * Date: 2018/8/15
: g# t9 U( }2 r$ v8 F$ s; s - , a9 j' ~$ N' e1 G3 k) b
- * Time: 23:008 V: R5 ?& W' ]/ {$ X0 G& a5 Z
- & `, s+ c8 ^7 s; X2 [& A+ v, u( n
- */require_once "./qrcode/phpqrcode.php";/**
) Y7 C3 X% d. ~2 R( r - 0 |8 Y: i; J' w5 h6 ~3 ^* Q( h& o
- * 生成电子签名& b: T& J' p+ g; R; V; a
- % h% t3 Z# m: b+ T; P( b3 o; ]
- * PS;使用微信扫描二维码; J) n& @4 s; o$ ~0 g6 w2 T# s
- ) y0 U9 a7 m M8 b3 I2 \3 [
- */$content = 'BEGIN:VCARD' . "\n";//起始标志7 n! T, Z$ M0 {8 z) V
- % y6 ] s& R$ V' y3 Z/ w1 C7 r
- $content .= 'VERSION:2.1' . "\n";//当前版本8 S* U2 q5 I/ b
- 3 A+ e9 G9 Z3 T' v' q
- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名2 ~* T/ l( b8 i) s, b( z+ g
- ; e* U* @7 W, ~+ i5 ^% U* y
- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称% B5 `2 V5 S4 q2 U+ e: M2 \- u
- 6 A6 f8 E- S* w8 \. N* ~* d
- $content .= 'TITLE:PHP研发程序员' . "\n";//职位! h( e, d9 T$ d- H" W w
- " f2 L1 I: D! d
- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话# v5 D5 [8 J" i' Z/ { H
4 N& w; ~# a4 E9 x' ^- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址
3 O4 e1 ]+ K# I* t* l
+ Z8 a5 c: L- T; m- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)
5 s& x' }( S n& M& {; p
! g5 M2 t+ M& L i: b, M! k1 T! S5 P- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话
2 \( n, e* A: S+ T3 e9 d- K* V - + i7 |* S! v5 e' b5 o
- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱. X( N: R' f3 P/ q: p7 v) x
& J* O9 O! B# U A0 c8 Z- $content .= 'URL:www.baidu.com' . "\n";//个人主页
# t5 A1 K: L0 A9 Y. z2 i
" F) X* k* \% O3 K/ ]4 M( |- $content .= 'END:VCARD' . "\n";//结束标志+ J& z+ k+ G6 W: O" T
- % {) b! H8 c' g& t0 n, N8 n; J
- QRcode::png($content);
% e3 m- J Z& |+ g1 @5 ~) P - ( t: P- ~5 d2 ?% o) K* G' s
- 7 U7 }- ^7 o0 Y0 A; `
复制代码 5 r+ [- r; ^, C# W7 Q8 X. ~0 B
相关文章推荐:9 d' I% s/ T" d% ^% \) m* Q
1.PHP生成微信二维码实例
' f5 n7 Q9 q/ R7 F0 s- L2.php网址转换生成二维码& |3 D# t7 L; @3 N' P# Z
相关视频推荐:% n/ `" M- E0 ^! o. m% O
1.独孤九贱(4)_PHP视频教程
6 T3 F. ~8 m* m0 e2 ?5 ^/ H& K) O4 ?二、JQUERY生成QR CODE
5 ?: u# l+ _* N! U( N源码地址:https://github.com/jeromeetienne/jquery-qrcode
. [ |, O4 \- I6 f
$ }1 a* @5 w5 {: C, s6 _1 }2 Bjquery_create.php) b- G2 J; H* W. A" S& y
1 v. k* y& U! o; O8 z$ | N3 U- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码
" W' N' F4 V. O% g三、PHP识别二维码 D; d6 r3 x- |; f9 N4 Q+ |
1、方法一* W# E5 Y8 A) s9 l- l
环境需求,安装如下扩展) {& n; q! }4 H2 a
- ImageMagick
8 U* A3 n# c) k- zbar
9 F7 {" t p4 I( h% r3 D. P- php-zbarcode
: N H9 \: D4 q) y ]
8 M. w/ h- ^4 h" w5 B+ p2、方法二3 ]) e+ f8 N; T& t3 M- o& u# O
PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以
P" d% e" l$ }7 h, tqrReader类:https://github.com/baagee/php_QrReader% i$ F2 B+ t; b- I
H( F( k3 x0 @5 Q& T. N0 Y6 p
7 x: D( @1 J+ l) r. Q- $qrcode = new QrReader('./test_logo.png'); //图片路径
0 M( r0 k$ G0 ~1 p& `; ^
2 P9 _: v0 e# @( [( ]+ a) l- $text = $qrcode->text(); //返回识别后的文本
8 I+ o7 k: G5 q5 o
: T1 @# }, Y' J! w$ |/ I- echo $text;
; d/ v9 H9 y6 _3 g8 a - ! }7 r1 i& L6 n m+ i' E; }8 e
+ A a& _3 z0 j; `: `
复制代码
* w2 x- S- D( g5 ^0 I& X链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7$ Q4 f% O% }$ Y4 P% \/ R9 C
& o7 z! V( y6 J7 ]% v
4 o& G4 }2 z) ^ {. \
( m: y$ g9 a6 c2 T
) n" a* D; h" g& q
% o% X* p1 t2 p$ X a$ M- @ E6 w# }2 K
: I3 n! I* u! J8 M5 a
0 y3 [ p1 g0 E/ X7 I4 x0 u+ Q: T/ e9 P' b" K8 U+ i! W3 {0 n
|
|