管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。0 {5 t, z: y$ [/ g3 k
---------------------------------------------------------------------------------------------------7 x* r3 u+ W$ r) H7 P0 M
二维码的分类
: d A# C$ M) p- d% @; L线性堆叠式二维码
3 V6 T- w6 N* a' R' X5 p0 M/ i0 {2 d8 f' m
矩阵式二维码" m' I1 Z% w4 X6 w
4 ~" ^) J3 Z! x8 y% }8 d二维码的优缺点
E$ c/ v1 d7 L4 E7 @3 w+ s4 c优点# t$ d8 z% i- |% L A- b
信息容量大. S% R* h D" q& {1 h6 i* h
6 @+ }% r# t% J9 p0 x编码范围广
, r. {. F0 {0 j7 C9 V$ i
5 p$ U [/ a C0 Q# l( [! G容错能力强
- ]1 t! G7 k5 l' M
6 j$ h; Q2 N) ^% G译码可靠性高$ _2 O. [% S; R
. a# _& D8 r G( q; F! @* e0 ^
可引入加密措施- |2 M3 i1 q; e/ \3 X2 k# ]
3 _+ ?. ?- p3 }* p+ H成本低,易制作
% |1 ]9 N& G5 b
# d$ n5 h: U) g8 [缺点
: `; H9 ^! D- i二维码技术成为手机病毒、钓鱼网站传播的新渠道
+ ^" G9 B& E+ z' Y2 Q$ ]; J7 f0 Z. M& ~ |- \
信息泄密
4 t8 u" r. {, Q: Y$ d5 @ I4 w( `5 _1 o
目前流行的三大国际标准
; l) J( I9 k5 ~' CPDF417:不支持中文( t! n+ _* x1 o
' x* W; R3 p7 n3 P9 p3 @ t4 z
DM:专利未公开,需支付专利费用
2 k* G2 S0 Q1 \4 R" @% S% y9 t8 L5 w+ C# n$ S
QR CODE:专利公开,支持中文" U5 `; |8 A9 _1 m! n- r, h& j
! |3 s( P: k6 N2 V' |: F+ X# ?. u2 L
QR CODE 纠错能力
4 `0 p) ^, e) x* O# ML级:约可纠错7%的数据码字1 ]1 Y+ H/ e6 p" r8 P
; x) Y0 b/ @* h4 h% Z, i, jM级:约可纠错15%的数据码字( ^! G1 S# v6 ]) ^& Y5 U
5 F* T8 W. _8 a: c* R' k
Q级:约可纠错25%的数据码字$ u. f4 c6 f, q& Y. a; N4 f
% n' T9 J0 T* g8 @& o0 |
H级:约可纠错30%的数据码字) B6 x. C0 y& \5 P
4 Y) R0 x8 g" M% i5 p前提条件
9 X/ o# F3 q) e' w- u3 QGD库
0 ^; T- i% B' u- @7 o/ |3 n
+ n @. ]6 [& f- Q* Y一、PHP生成QR CODE
& M8 ^$ q' ~1 j$ p官网:http://phpqrcode.sourceforge.net/& K( l7 d* q1 u5 K8 g
L# R+ s/ N0 R, z" e下载源码:https://github.com/endroid/qr-code
1 x/ J0 ]7 K5 h7 s
6 l! W( y' Y- _4 B. o" Z目录结构
/ C% Z* n* P) d# ?, m# a
, F4 v9 p% \+ ?/ u; \
% w/ [6 E; Q% b3 E' T. _1、qrcode_create.php1 F4 e* S, W' a; R/ o
ps:生成普通二维码 B! u4 L: p8 Y
- # ~+ a: {) T* h" Q7 x7 a
- include_once "./qrcode/phpqrcode.php";/**3 d6 J" {" o; J- E4 w+ d. p% O+ a
; d0 o- d: H/ I- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径, j6 J8 g. I/ z" p( ~
6 [1 l8 D9 i, y, R6 P( M% X7 R& c- * 在浏览器上直接生成一个二维码(内容为abc)
9 r, k; [- C" k1 v* C
. X" T* l1 \& Z8 T- */QRcode::png("abc");) b; k' a2 E. i9 Z n9 x @0 s
7 q9 b) O$ @ x+ Q: H$ S- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**- q: ?, Y: ]+ \, C* M' l
0 [5 E$ R; K; V" N1 o( ]9 v. b- * 生成文件到本地! P* H9 S. F7 d y3 b& R
- z* a2 O& R1 ^4 N: i/ ]; K
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)3 e" y# ]6 e" s0 O# a0 W9 c0 ^
5 z' j: R" f3 d, m0 }- * PS:$saveandprint源码的p6参数做了修改" \$ o2 b! R; K( A6 z" O+ t, s
- " T% P5 d# J5 T6 b# ~+ } u' L0 \
- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);, C3 `$ r$ X) W8 t% d3 c E
- 2 S1 G8 s6 a; c
- & U6 r* z4 M; R6 l2 U4 W
复制代码
) b1 ~: @3 b* q! D8 a9 O: \/ {2、qrcode_logo.php) n" t0 @ V' ^( F
ps:生成带Logo的二维码
5 X" t( n6 O2 R; l% K/ `- /**
* L$ S' y& a- h" a6 l9 j% A+ Z U
0 d) K' M9 R" P( m' ]- * Created by PhpStorm.& G2 G2 U/ R5 X. E
7 p/ m% `% {2 y- * User: user# F5 f( ^% l9 k V$ m! O# y! o8 W
- 0 [& y8 C- ` _+ _
- * Date: 2018/8/16
2 Z% d3 h" K* M+ n
; _' V2 Y8 t% x( Q* w5 N2 q- * Time: 10:43
8 D. S$ E& M/ q8 J) d0 w0 n; k: X" S% }
3 A2 U8 ^* ]& Z* H- s- */include "./qrcode/phpqrcode.php";$txt = "测试内容"; i$ f3 }5 f) ]2 o
- 2 l6 q4 c( ?/ h ~1 I8 T
- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称' @% Q1 q% K1 C. v8 f
2 f ~/ e- V: Q6 ?- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是2 @5 b$ p) j% g5 q& O
- ( `2 C6 C! ] `, T# A
- $margin = 2;//边距8 X! T6 z# U1 u, }& w. S
- ! D0 J* @1 E" k2 x
- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片, S, }/ G# y! P7 P' p2 k6 Y( ~
- ; u7 ]: s) f6 D+ N: k
- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){
$ p7 J" {. f6 t, K j6 D - ) _* W- K" x$ P% Q. A9 w
- $QR = $picPathAndName; //已经生成的原始二维码图7 L6 C1 P" C8 g' ]0 d
- 0 m( @9 y% X, B" z
- $Logo = './pic/logo.png'; 9 T) W$ o3 y: x3 `+ S
" ?( u+ t& F: b$ U3 i$ k o' M- $Logo_re = './pic/test_logo.png'; ( ~1 D+ E* u' E" r" Y
- ) i/ `5 D: _" f
- $QR = imagecreatefromstring(file_get_contents($QR));
! O0 |* v3 H2 J& h - + _: U1 ~ V7 Q. o7 y% r, y
- $Logo = imagecreatefromstring(file_get_contents($Logo));
# v! I) d- s) Q
; w2 ]% i/ s8 ]- $QR_width = imagesx($QR); //二维码图片宽度
# r# G: G& K0 [' w8 g P8 u: D6 n - 7 {* s8 `( f. w0 M
- $QR_height = imagesy($QR); //二维码图片高度) h9 s1 ^8 A2 @4 M
; t5 w! p( [& T! R) u/ x$ }- $logo_width = imagesx($Logo); //logo图片宽度! y. \- F- w: x0 |& o
4 _' Z0 h' p# G/ W- $logo_height = imagesy($Logo); //logo图片高度
* b8 [* m7 a, [" y' `
- n) r% Q4 B7 W- $logo_qr_width = $QR_width / 5; 8 \1 v5 `+ [9 I& \% x5 i4 ?5 d T
- 8 s5 N! ?; ]# P! _. }
- $scale = $logo_width / $logo_qr_width; 7 Y( F- B) B- n. k9 x* H
( {+ L5 [" a8 k9 }6 c- $logo_qr_height = $logo_height / $scale;
: T- E' L4 |3 p6 I4 v
0 S* `& N2 U! x' g$ Z- $from_width = ($QR_width - $logo_qr_width) / 2;
8 j( g r) [" D: |6 D& O6 O
. o) u/ F- X% i7 p( Z# M- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
3 D' K( K/ \( Q: Z2 t$ D4 R6 k% j - 4 \: x% D/ R/ k- }4 z6 @
- //输出图片
4 B3 V" _# x) h2 H# Z8 [ - / V# n1 W: Y( V
- imagepng($QR, $Logo_re);7 @7 I( @; X9 f8 R- O+ R
- 1 |/ g7 L8 Z7 v/ k( h" E; m4 r, _
- }5 o5 i i: Q5 C5 B' o; P! f9 f
& z4 W8 `/ S; j J" T- . l% C: ~( v# q# F) g. _
复制代码 3、qrcode_vcard.php (生成电子签名)
8 O) J0 y t' K: z& e' K8 ^6 f, u' _9 U* z! W
vCard格式:https://zh.wikipedia.org/wiki/VCard) N, e2 \ Y2 x3 \$ G3 j
) b2 U1 \+ K3 ]. N, i- 1 t, L) o7 L& `4 R/ p A+ a9 B
- * Created by PhpStorm.
/ v0 o7 |8 \* S/ w A: j' K {
( Z+ ]$ l( I, ^! p) y7 N- * User: user
, n7 U! `# |6 Y# _$ b- i - , Z \+ {+ z- s# ]) x1 s9 v9 @
- * Date: 2018/8/15+ L- }+ J+ G v( v5 c# N
( A0 {! d/ W" Z9 ?; |3 q9 E8 }1 m- * Time: 23:00
. _1 V; k. |# y L0 Q2 ] - / y1 s( g* U- s7 h9 P/ Y& \
- */require_once "./qrcode/phpqrcode.php";/**( J7 `: t; ~5 p# v, m: x) D( h7 b6 V
- 1 F. e0 {% \+ `3 {' P5 h+ Z
- * 生成电子签名# q8 w$ D+ c* G/ t& X& ~
- : ~; l1 u( d( H: z: u9 F# }
- * PS;使用微信扫描二维码' v3 G+ I7 }# T
5 t& Q" |" l4 B& S2 _- */$content = 'BEGIN:VCARD' . "\n";//起始标志' C* I/ S3 l$ ^/ ]! O" O
/ u' H+ P" q/ Z: b' A7 I- `, @- $content .= 'VERSION:2.1' . "\n";//当前版本. ^2 |6 X. b5 P' f* }% e
- " I% G! B( T, m/ J8 ^$ p
- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名
* t) l( J2 x8 E# y/ C - ) @* [/ F U' }* D7 ?# [' ~
- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称
8 i( p2 y+ R f5 |
$ a; r' ~6 Q" g- $content .= 'TITLE:PHP研发程序员' . "\n";//职位' x- g. O" C2 R5 `
: [6 s- Y6 x* v6 b8 x P- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话
) C9 @/ c' K, k& \9 w- n
/ y& B. k x# v# R; Z0 f `( a- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址
/ T5 m$ X: ` q- K" _& F6 [ - 2 N$ m' @# y3 @
- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)6 ]4 L$ t, R4 q4 I0 ]# V
0 N. _7 m: |& `0 L- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话
; p8 G+ m2 }; Z' }9 D" `5 C1 L
) q8 k% A" J; M8 J- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱
& T- G3 H+ } l$ I" j - - B7 }2 n. K6 W% o
- $content .= 'URL:www.baidu.com' . "\n";//个人主页
5 W0 r* |2 s9 w' o6 X - 3 ]7 |; Y6 G7 B* T/ _ A% O+ a7 _
- $content .= 'END:VCARD' . "\n";//结束标志4 _2 `; [, g+ A4 D
- & Y( d- V5 } R& l
- QRcode::png($content);
6 m' }, n, k1 q, J+ R/ L* \ - ; e; n6 A8 {# o" ]4 e% R
- - {9 p( a T$ x/ Z1 p6 k
复制代码
. A# ]- w+ |& j相关文章推荐:/ S. e o" V" q5 C r# z
1.PHP生成微信二维码实例5 W" Y7 P! f3 g' _7 h5 {# \6 w
2.php网址转换生成二维码* C: H8 A* H: j4 {
相关视频推荐:, Y* X2 b! K, m. g1 E
1.独孤九贱(4)_PHP视频教程* Y+ l9 T5 Y+ v$ ` V( l/ X
二、JQUERY生成QR CODE4 L! H" [" d+ |% S
源码地址:https://github.com/jeromeetienne/jquery-qrcode
# O& g& X: S0 G$ E9 [
* h6 \) {4 C: A4 v$ njquery_create.php, Y5 u/ i8 z$ ^3 D' z
% v0 f: V! s! H% F6 @
- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码 . G: L2 T' U4 T$ P1 b' D8 g7 o
三、PHP识别二维码
5 W; r3 Z: E5 L1 C0 c1、方法一* C% p# k- |$ D I3 A0 y, M8 ~
环境需求,安装如下扩展" N- B- A+ p' L2 t6 m
- ImageMagick
0 {' E$ D. i- R5 \3 a- zbar
! \2 {7 G* e9 Q' ?/ X- php-zbarcode
; I" h9 i0 y, t; |7 z' w
( D$ ~0 `& k3 ]! @2、方法二
" I+ H: A! p6 C# oPHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以7 g9 |6 x3 B: a, x
qrReader类:https://github.com/baagee/php_QrReader
8 d, T# N# r$ F5 I! D' d5 F6 Y6 {; b A
$ I( b, P3 B+ V ~: H) z0 X. P9 P- $qrcode = new QrReader('./test_logo.png'); //图片路径% P/ R4 }* r3 G* J0 x. z
( z9 L5 o1 x0 S/ ~6 s9 v- $text = $qrcode->text(); //返回识别后的文本
! P, I$ @- C& B2 Y4 ?
; [2 H7 ], s+ f- echo $text;, ?# J5 `% s$ v$ m
- + X1 ^: y. E& t
- ; r2 |$ }! n, y# Y1 O4 n
复制代码
; M' h* v+ Z2 H6 m: Y链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7: i9 l. A7 R" e/ k
4 ~. L7 h9 `7 B' F$ F7 p+ w) p. Q$ g d8 o
/ E6 ^3 V" v) @. ]/ l$ t! G9 l: l& U) R* w! x: L
; n$ Z3 ]& D" m% M4 S
* I' ` E6 o& `6 y/ r4 Y. c/ U2 l p8 K. p
7 @; T8 M1 N/ h. M: a' r
9 F* ]* q: e; B0 Z6 }
|
|