本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
4 s9 {6 `7 o7 P6 ]6 N. b% Z/ \---------------------------------------------------------------------------------------------------
8 D/ V* }! x( J4 q二维码的分类
6 I# v- [- K( @- x$ p) R4 E线性堆叠式二维码& x$ p- ^/ {* v$ i6 F1 {0 u
4 J( o+ u7 f! Y* E矩阵式二维码
' H2 w7 W" q/ }- y2 g, N( c1 ^( u* c% r2 @( C9 x* C9 C8 C
二维码的优缺点
- ]* @& t) W; r2 y" _: Q优点
/ H# Q( m9 f$ ?信息容量大+ E$ D4 Y) `$ R. ]
( y: @: K) v/ W0 x1 Q* C编码范围广) M) C) [0 B0 K: K! K# i
, ]+ {8 ~! ^8 `! D容错能力强
( j* \& M8 M3 I& J% S7 I# @2 _4 \5 f+ e+ j7 e9 f8 f+ R3 l
译码可靠性高
) E* \# v( c7 O. m: Z, y8 z, g8 Q1 P0 H- g& @
可引入加密措施0 h2 \% p2 K$ S* ^
1 ~) b1 z0 H4 C! W
成本低,易制作
. w9 M5 W; I6 R, S% H! w5 z3 R8 Y! y* t
缺点9 w, M! u7 y: o! L' [8 |6 w; X
二维码技术成为手机病毒、钓鱼网站传播的新渠道
. s7 P; s. ]( l: T* d0 x+ _; U2 u- ^& y, Y6 v
信息泄密
) ?* A/ X7 k. c0 c/ ]1 Q& }7 e# Y9 K! ^3 C7 N
目前流行的三大国际标准
( B) ]) o, e3 r* XPDF417:不支持中文' e+ M3 |( E* W6 }
' {( X, b/ U7 A9 O% m7 YDM:专利未公开,需支付专利费用# ~! l6 k* Y4 j! o2 `# H
+ ^4 S4 y& J- |/ @* Y: o# }
QR CODE:专利公开,支持中文4 x" `" f8 q6 b" v) b) `7 d
U9 j! ^0 {7 r2 g5 }( R! QQR CODE 纠错能力9 J2 t0 i8 u e" r
L级:约可纠错7%的数据码字
6 }. y N6 G, [. s2 Z8 S! }/ @/ Q! S% O4 B D3 `
M级:约可纠错15%的数据码字
8 m; s, a; r7 Y+ P8 h. [* q0 {. d0 P1 {% h( z- T, a! n
Q级:约可纠错25%的数据码字
) _- F- I$ p! w# B: O4 u# ]' G2 b5 ^+ E0 c. s- n+ b
H级:约可纠错30%的数据码字
6 h7 \0 J* Q' k3 j7 _9 g$ F* J+ @6 o' `0 u! T
前提条件/ ~) t! u' b7 e+ T& ]
GD库
2 \! u% i6 ^0 G7 B4 g5 h0 p/ U
5 w3 `8 u0 F: w5 p6 j M* p一、PHP生成QR CODE! a& R" S3 H `8 s
官网:http://phpqrcode.sourceforge.net/
+ ^ i! W/ t/ k5 ?: Y# }3 o$ s2 @3 n
D& A: V. k+ O3 [5 j& W下载源码:https://github.com/endroid/qr-code2 U5 J' H: A0 J3 W* j
7 G- `" s4 W* j0 S- b! I4 r目录结构) D" v" H: v+ W. b; ]
9 r5 `6 d- \1 D% G0 V+ I8 y5 h2 h
0 g6 W& W1 }* ]) s$ k1、qrcode_create.php
3 F$ i8 f- Y9 H- nps:生成普通二维码! j8 ~4 ~2 a) r7 k
" d0 I9 g% w5 S( G$ O- include_once "./qrcode/phpqrcode.php";/**
; i+ y: J) u# @' r" l0 r - ( `0 Z5 S/ h4 p- b! Y" S
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径
; N) m2 M: a4 I: ? - & p# h1 c2 @8 |
- * 在浏览器上直接生成一个二维码(内容为abc)
6 b7 T. [/ a" r5 j5 `
9 P# L& T0 r; k+ d) A) w- */QRcode::png("abc");9 t8 N& m* `" K9 u5 l
F: }$ ]" `: y+ Y$ ^" J3 Q1 T- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**) u' d/ @5 _9 y6 l1 F+ x
- 3 k0 w3 f& U- @6 Y0 U
- * 生成文件到本地
0 f8 R& @# a, Z2 y& N) a - , L* i* B" s8 H& e: I& F2 Q
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)
4 u) \6 |9 a" y6 ]. u6 {
- D. M. W& C* a- i9 i+ T& I- G- * PS:$saveandprint源码的p6参数做了修改
1 a. m- l, Y& [ - " x& s7 I, [$ w9 |7 K* ^$ m/ h( Q
- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);3 c% n) Y( s2 F; v9 @' E
( U0 F& z4 V% L6 x! r- 4 A; v/ T9 g. h, `
复制代码
, y5 E% c- r5 }! w+ c+ u; e0 y' p2 p. L2、qrcode_logo.php
0 F8 a0 Z6 r/ ^8 t8 ops:生成带Logo的二维码- 4 r6 q- @9 [2 Y3 `( M: g
- /**
( D$ p; L% M) X' E
+ @7 v& D2 o: t+ X) {4 ^7 \4 D5 {- * Created by PhpStorm.
( V9 S1 `+ g4 y4 }) ]+ F - * P+ S" L0 I) X" H$ o
- * User: user
' i* m% }( }& T S$ l. } - 6 ~6 g, E' g3 u5 ?
- * Date: 2018/8/169 P. R$ l; h: C: m7 Q& D
G/ T `5 p, s: q1 s- * Time: 10:435 f) b2 z0 P7 ^
- . t, c1 }. p# x: k3 `; n: e2 s# q
- */include "./qrcode/phpqrcode.php";$txt = "测试内容";
. c3 M& P; }# h8 ? - 8 f7 y! \7 K8 @0 J
- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称 S& T% O( ?8 m. K4 y5 q
- 1 P! {4 U T4 {
- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是
, Q/ P6 b1 Y) e+ r+ E% |& P- g
( @- z/ }6 m% P6 @9 |% Q7 R) W% Z) A- $margin = 2;//边距
7 z) L- X2 V l' w% V8 B - . e* W. o/ V- ?( N; P) w
- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片
$ g+ ?4 t, E) v5 K" R
; S* M+ c7 l' s" z7 q- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){
2 ^: R0 h4 [! `
& o3 m) Z& B0 T% ]; @ d6 O0 ?- $QR = $picPathAndName; //已经生成的原始二维码图2 K! Y* x2 N4 o8 ^: {
- 5 J, o5 |% K/ ?1 C/ ^0 t9 h- J
- $Logo = './pic/logo.png';
$ O+ V$ w8 s% z7 E; X! P
& `/ L/ m2 `$ w. d+ h5 Z- $Logo_re = './pic/test_logo.png'; 1 \6 K4 q- Y% q/ X. Q
- ) _7 A% J# P0 ?1 c/ Z& o
- $QR = imagecreatefromstring(file_get_contents($QR));
& U% ]1 J' q, Q: }( K - D# t! S- S7 W' j* g2 k% f1 O
- $Logo = imagecreatefromstring(file_get_contents($Logo)); 2 f% ~& h! p. S
8 W$ g& q" U1 `) t3 V- $QR_width = imagesx($QR); //二维码图片宽度
1 Y: s. _1 `1 J8 D" \! i4 @5 j- S+ y
' g: ?7 v }- y4 D5 }1 g; p& B' F- $QR_height = imagesy($QR); //二维码图片高度
6 O; ?. J# o3 B6 D1 I( } - 3 _, V7 F/ A" ?# R9 o/ g2 e4 M
- $logo_width = imagesx($Logo); //logo图片宽度
' v4 \; d% j) y0 [6 r - , A: [) _* ^3 Z" x. Q9 L- ^4 k
- $logo_height = imagesy($Logo); //logo图片高度 q7 p/ @+ [. h2 V
0 ]: ?3 @6 p a6 k% T5 q- ~, Y- $logo_qr_width = $QR_width / 5;
+ B0 y: M0 Q) ] E7 y- [. S
( p* l2 W: m! X/ u5 u8 t/ M5 i- $scale = $logo_width / $logo_qr_width; / j8 u$ [/ q2 I: _6 K: N8 R, a5 o8 A
4 x3 ]8 ^& X4 \6 {- $logo_qr_height = $logo_height / $scale;
- d$ S e; V* d - - v$ `) X7 e7 a. L1 F% _6 C
- $from_width = ($QR_width - $logo_qr_width) / 2;
( b W, X$ l8 v* Z6 u' s
. }; V! E8 r& e- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height); ! f4 n3 z& w3 U5 Z) ?* Y) n
: c/ }; A( y/ X3 I; S- //输出图片- ]8 U% X& {* C1 }7 t* h5 @ f
2 W- n6 O& K& U$ ?) O8 Q- imagepng($QR, $Logo_re);# f% W; g6 A' v2 Z) x# @: S
9 U1 Y% b1 ~+ K% I' ^$ [7 E, T- }7 U1 z% d5 u; b! d/ w7 a
; c3 x, B' i% f0 U# ^' z
) w+ w* `* x& S" A
复制代码 3、qrcode_vcard.php (生成电子签名)9 D1 z- ?0 M5 y# f/ I3 t
4 ~# [# X) h2 C6 D: F; x9 D/ RvCard格式:https://zh.wikipedia.org/wiki/VCard
$ I' P) q5 r( @: o6 [8 P' ^; ], t% k8 k. v' W4 h0 t
5 Z, t0 E, o: h' d9 `6 ?8 x$ G8 N- * Created by PhpStorm.( v3 n; P& f! w2 D7 A3 y* @
- * U' I6 i4 ]) z( X5 d1 t7 C
- * User: user
$ ^( u; W/ {% B - , J% y; ~/ D4 Y5 R1 C7 T9 I; L8 P: z
- * Date: 2018/8/15
' v$ l& ?% d) j) i6 |# `) W - 6 j3 L5 ~/ Q; g1 Y$ T6 Z, N
- * Time: 23:00
( i2 o) w8 N4 ~9 o% `9 W( l
& g5 `" Y; P7 P: o, g5 k0 s- */require_once "./qrcode/phpqrcode.php";/**
$ d/ z O) A2 H/ |' X0 q, _/ Y - ; \1 ~ ^; y3 d0 \
- * 生成电子签名! m4 J, `: g0 g* u: q% o; n
- , r. h- O* |3 `& R* J9 G
- * PS;使用微信扫描二维码1 p# x& B# i5 K3 Q6 z/ ^
- 0 m4 a* ~8 \9 V1 B: R& B
- */$content = 'BEGIN:VCARD' . "\n";//起始标志/ R k' J* r6 e% ~
9 N$ R9 c- n7 X$ ~- W" \, C- $content .= 'VERSION:2.1' . "\n";//当前版本
* @% f5 @! h3 Y/ `4 C0 s8 s0 L, t4 q - 3 o# M# w! x! O! S J
- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名& D. V( d& B' B$ s
7 U; V- x( Q/ F+ |- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称 f7 ~( A* q4 T; F/ j
1 X: O* H! Y( m9 P- $content .= 'TITLE:PHP研发程序员' . "\n";//职位3 z7 d" }; d2 \- v8 A: F/ O) W& X
: |6 v% p% A8 E2 n7 M- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话( b5 _1 f. ?2 Y9 y
- ; i6 U" [) j% d
- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址9 M6 j7 ^. g ]' K0 ~
& Y. R+ M# y. q, ]- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)
: p3 ^; i4 q+ n" C$ S3 j - 3 y$ b* z7 X0 W8 [% d
- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话! m0 ]# T. J$ ^
- 1 n" \* L, t% e) T& j
- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱# F1 H4 R, X7 M, Z b! J1 [
& F# g& y& ?2 T3 D; J- $content .= 'URL:www.baidu.com' . "\n";//个人主页0 S/ f7 N1 \- f4 @. I& T+ Y3 w' _
- " Z; b2 N& t* z/ Y2 Q, X
- $content .= 'END:VCARD' . "\n";//结束标志
4 b! c- S% c2 {( L# C0 l
3 Z F+ Q t5 V1 \- QRcode::png($content);2 X2 X+ m3 W2 S* n
- , B6 t! w3 y# G
5 @8 L8 L& L8 ?' c3 i" D
复制代码 1 L* @) T# n$ u" Q* j, L3 v! [
相关文章推荐:1 I/ Q }4 K5 R4 e ?
1.PHP生成微信二维码实例2 M) P* [1 a6 C
2.php网址转换生成二维码
( S' V/ `2 g2 s/ ^相关视频推荐:% G/ D8 h( e9 @$ D
1.独孤九贱(4)_PHP视频教程
& m% s$ n; H3 o+ F5 r二、JQUERY生成QR CODE
# A# W( J5 l1 E源码地址:https://github.com/jeromeetienne/jquery-qrcode
! j, t2 y1 N5 k2 C$ ?% y
4 K& J* J8 b7 D: r1 ]' H1 H! Xjquery_create.php6 i4 A# t5 @4 [" b# ]% I
- n1 J8 v1 J$ _% Q* K2 r! H- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码
$ p- ^* k3 \+ A; m三、PHP识别二维码2 z& S! L7 K9 q8 ^) ]
1、方法一
5 k: e0 N" W. p3 U0 `5 L环境需求,安装如下扩展4 E+ _" n* O3 n& l
- ImageMagick% e& l5 q. S( y. r- A6 M! x
- zbar
" w& f% q) K5 `1 X% y. p* X. {5 u- php-zbarcode+ O( J* j. E2 l1 f/ X1 l% F7 A, U& N" C
7 \( L7 o5 ~# W: O, L1 h
2、方法二) @5 i' R: A3 a, g+ m2 q
PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以1 B% K; _1 e4 K
qrReader类:https://github.com/baagee/php_QrReader8 ?9 H# k2 J; u5 q% i! ?7 P
4 S+ a) g* u u% x
: J. q, p2 }' c, N9 _- $qrcode = new QrReader('./test_logo.png'); //图片路径8 m6 b6 D5 Q9 s/ Z5 e% s; B: F5 D
" F& H2 x t y% b A1 c) J- $text = $qrcode->text(); //返回识别后的文本0 w" q4 ?6 o0 D8 U
- . |. s, p R5 z1 ^& ~3 T! X
- echo $text;
}7 h8 Z3 H( x$ H
9 z' p4 ~, S, F. @
p$ O$ b( k0 m" j$ Z! y" {
复制代码 5 h4 Q3 m' n+ I* l. I( G" y6 K
链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7
- r F" u3 T6 Q5 l! w+ O, J
0 ^, `5 E1 G& \. B" _* U) b. z" V7 W- L5 U. K! S& q6 c! M
- P4 K& E8 S! X1 F1 u) A s {
, B" K1 i/ x$ @7 ~4 V1 G7 t
5 i$ b4 ?; B+ B7 m4 N6 L1 P' e' Z: u0 @' y r, @! Z
; t+ d- t% B9 L% H+ w% y W, P
' K7 M9 z' V. {0 |' ?7 d. J" O2 `' D4 X
|
|