管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
& h3 s4 }. u u4 c7 [( @: d/ y% c" u---------------------------------------------------------------------------------------------------3 S- J# f2 m7 Y
二维码的分类
# ~7 v& r% b3 \ y) {" \线性堆叠式二维码
6 o! u& t4 Z/ J1 H+ }0 ?+ z' } z: ]7 Y0 [+ X3 H& g% }
矩阵式二维码
* |7 F: a; `7 `8 w# X- D' G" i+ J: l7 b# t+ L y9 g3 k/ b4 N
二维码的优缺点
+ E: O! W1 t6 J' C9 s优点
6 e5 x* M. |2 a* A( W信息容量大6 G7 L9 |0 H, A% i9 i! l4 z
K, n- j N2 [. w* p5 p' ^
编码范围广
3 v- E1 h) w" ? q% o/ I6 ~0 z: {* u% ]2 J: t* M
容错能力强1 q+ X9 k3 ], _- u3 A; V) R9 V
/ F2 A9 J! p2 V r( b ]- \: B译码可靠性高
, ?1 a& Y: X8 e. {# u" g Y* @$ [ ~/ R9 o0 a1 d7 E
可引入加密措施
' C4 p$ L7 i4 Z# m1 k6 q
9 }/ y# Y7 I; Z1 V1 o1 t成本低,易制作
1 K) ~; X+ {( y# Z# a7 P2 _: R1 Y' b6 z" k
缺点, W+ }, u. O5 O# T
二维码技术成为手机病毒、钓鱼网站传播的新渠道
# V; O, @) t% v7 v, C8 a2 d( i. k
信息泄密
6 H$ Q1 l' {* v- V6 D/ j( C1 q- b y% m3 i, e5 D
目前流行的三大国际标准
. o- O" A: _" o8 w3 S( g; oPDF417:不支持中文
# R8 `; b! A( g& U. |
9 k( z" f( ~' w1 S1 i/ Q( ]DM:专利未公开,需支付专利费用/ c. c& T x% ?
( b% C8 ^. D0 q' u# ]QR CODE:专利公开,支持中文
1 ^. \2 z; B* U$ F) B# o/ h6 g+ r( k" o; r) y
QR CODE 纠错能力3 H, W6 k( f- q9 F# ]
L级:约可纠错7%的数据码字
. N3 t6 U9 ?, w- _( M" p
. C6 Q+ z9 t1 XM级:约可纠错15%的数据码字3 n- G$ ]( A/ f5 J/ W- ?- T
2 `8 w3 a) v0 ]$ C
Q级:约可纠错25%的数据码字( Q: A' m4 L3 ]* y' A, m: W1 `
9 N, x/ z5 z% I0 C/ c6 B) `
H级:约可纠错30%的数据码字
; k6 Z. L T, M* S! K. X1 V" b* ?, v! [& S
前提条件
6 b/ l8 m& J( d1 N# `, Q9 {GD库
& t, o; v, v9 F7 j Z0 s* ~) O7 c# \% g7 L0 ] G' n( l, o4 E( o; x
一、PHP生成QR CODE! Y6 [" M: ]; i9 C" H
官网:http://phpqrcode.sourceforge.net/
3 z$ M9 P) J( R6 p" y
3 b* N) {# N O7 i/ _0 G下载源码:https://github.com/endroid/qr-code, m9 \+ V6 i9 K2 }0 a& q) o& L, `
/ J/ q3 O+ s ^3 Z) L1 i3 N3 V
目录结构
( E \, o' q) u2 y8 D$ N3 l
8 [7 h$ p/ U5 C
2 O, j4 ]9 I7 q* G1 X ~1、qrcode_create.php
: L I/ B5 i+ pps:生成普通二维码3 y& B; a# m2 D
- , }% R1 [5 T8 q% _7 Q
- include_once "./qrcode/phpqrcode.php";/**5 Y% E0 @0 R+ A8 T2 X
& @* V8 P! M. |7 v6 b& F' G/ S- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径 R5 u# n: e6 W9 }3 e0 u3 D
l, u; U( [* a/ c; v6 Y3 b4 {1 }1 J- * 在浏览器上直接生成一个二维码(内容为abc)
/ I8 ]' _, X, A, `% d
/ A% v+ b, ^( S4 n$ Q* P- */QRcode::png("abc");
- e/ n1 \" j+ q: x, }5 K - $ J# P* h, y& F( A/ L- Z0 ~
- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**- ]0 F+ {$ a4 A- E0 y& @0 `' _
+ j) x$ E3 B4 j- * 生成文件到本地* D' \- O6 g5 q6 a
- 2 U' ?! u. g( u5 D. y
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)
* c) C7 d; ?! C* b
' D7 p7 p/ a/ O) V; t) Z2 ]- d- * PS:$saveandprint源码的p6参数做了修改8 R+ g1 R# n: w, w
- + z* x7 L+ g! S
- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);- O: b6 P+ T( Z, d
- ' @9 A- L( X( ~
- s* h9 b* |, E( ]3 b1 ?& l* S
复制代码
P9 T0 w0 Z; x( H2、qrcode_logo.php r! |4 u% \9 S( q0 v7 W2 Z
ps:生成带Logo的二维码
# y* h* t. y; Y- /**
- u5 }7 R0 u6 v& I
% ?- ~/ F6 u; e7 I- * Created by PhpStorm.
7 |$ W8 n( p/ F2 \1 E3 A) a# w( w
/ o8 y, i" d/ X* z% n$ ~6 d z% T9 D- * User: user& J9 ]8 S4 f& @8 D% t3 r* W2 y
; r. R" A6 d+ d; @; h( S- * Date: 2018/8/167 u$ p( ^5 K4 B* f
# I. s c# V3 k) h- * Time: 10:43( }1 x i7 [8 Y' {
' x; }# n" R% _4 O" x7 H- c- */include "./qrcode/phpqrcode.php";$txt = "测试内容";! t- [0 [5 i% S \8 v
7 p* S! ~) Q B* A4 X4 t" h- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称1 o! ?- F( n. _0 z3 r6 s& v
* b( g8 x. _3 V2 }- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是
- v! p5 }4 V" w' w - & v$ r* j4 Z2 _. A! [. d
- $margin = 2;//边距1 Q; [, b7 l v* i
- / G4 F2 m& F# I; {# L) Q, L8 q
- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片& R+ J& u5 X+ q# ^9 U9 E; y. a% O
0 G" M0 \; y; L) T/ e- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){
0 a3 z3 ]8 h- O1 W8 j
6 Y+ @& u8 E- j0 f$ S- $QR = $picPathAndName; //已经生成的原始二维码图6 l$ c# c9 a6 O0 m
- 5 \* y1 w4 o; V/ z
- $Logo = './pic/logo.png';
2 f- k2 z- F- c. f' D$ u3 h% ]+ ~ - % y$ o% f- @' }3 o
- $Logo_re = './pic/test_logo.png';
# P, J) b& B# u( n
9 j* v7 a ]! j) D4 S- $QR = imagecreatefromstring(file_get_contents($QR)); ( r) U: D A" b" @ Y& ]
- $ q+ } K L2 e" r) s7 m0 v
- $Logo = imagecreatefromstring(file_get_contents($Logo)); ; D3 V4 _" _" y; N5 f; x
_1 S2 z T6 c$ d! I4 e3 y8 y- $QR_width = imagesx($QR); //二维码图片宽度' v% d4 N. W" x1 K3 ~8 p$ D
- . S! n$ d8 C4 K( i W+ E: v$ H
- $QR_height = imagesy($QR); //二维码图片高度
4 @3 B5 G& _1 L u$ x - 6 }8 g* u9 T. b. J* k+ t
- $logo_width = imagesx($Logo); //logo图片宽度9 N& r9 x; o" z2 Y. ]. {
1 v5 H4 K7 k. E% w: ^ w- $logo_height = imagesy($Logo); //logo图片高度3 G! ?, P4 g+ N. q$ w* X
- ; q; x& D' f& N3 F* ^6 l: D9 s0 v
- $logo_qr_width = $QR_width / 5;
7 O! ~! u' B" ]3 i
* d3 s0 R. O5 r5 D( R- $scale = $logo_width / $logo_qr_width;
; s% |1 Z3 V7 S1 h, J' e* p1 p - - m2 I9 z f) A. _8 ^) E/ P7 c
- $logo_qr_height = $logo_height / $scale; 5 k* Q* |; H5 T9 }$ A" {
- ' n4 x- |, S9 e( z
- $from_width = ($QR_width - $logo_qr_width) / 2;
5 X, ]' N+ R, v' M3 Q w
c9 q* ^9 A/ t I. {( S, H- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
& A0 ^# w# o$ h q% v6 `
1 A- l Y2 Y) ^- //输出图片: B7 @3 F2 {6 ~
# m* ?- r. {3 Z" r' | [- imagepng($QR, $Logo_re);
* m" ^- L5 v# Y- t' w1 o7 r* \
3 J5 e: I# \/ X7 n, v3 J7 L- }
$ H! T% d& j7 E3 E - W+ B( v7 ~" k- j1 n; v9 W
. d; m1 s% h3 b
复制代码 3、qrcode_vcard.php (生成电子签名)
" ]8 k! \# f; X! H
% ?4 j& D$ I/ }( m, c4 m G8 kvCard格式:https://zh.wikipedia.org/wiki/VCard
6 F* R7 H0 J2 m
* @' X; ~/ \ l" ?" A# |& ^! _) j: l- ' N/ C# T2 x+ ]6 Y( |6 B+ O5 g
- * Created by PhpStorm.
, u2 ^% i, h. _. r0 R6 U
* F. J2 R: f- s# q- * User: user9 F2 t1 C% A- \
, ^1 `3 [! A- _8 L& ]! t6 d* }- * Date: 2018/8/15
% g9 {! \. V. q7 s) t3 S+ y - # [4 f! X8 w4 w9 V) G' x! c! H; N
- * Time: 23:00- h, ]5 P7 ^. w8 r# d4 G
" f/ N$ {9 ^ C Z3 \& }. r1 }+ S4 z' J- */require_once "./qrcode/phpqrcode.php";/**
8 {1 h0 D! A. N6 V+ K; F - 6 n) {: n- F( f5 E! e
- * 生成电子签名
; h' v. z& r; M+ {1 g - 7 S3 L1 d# A% Q
- * PS;使用微信扫描二维码
& B; t0 Q: |* o9 n
$ y* h4 j4 o( P! `. i: `$ U- */$content = 'BEGIN:VCARD' . "\n";//起始标志
' b; _. f# e! d; c5 @' Q4 \ - 1 c F9 i# b; _( k' d, a* \
- $content .= 'VERSION:2.1' . "\n";//当前版本. M9 E. w3 p, b
- 3 \: S( ~0 w4 @3 g
- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名
9 ^( a3 @- _; N1 X* T
, ?/ f3 N* D) _; f4 [4 {- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称
& p& N" L+ b6 U, Y- i - , @" M0 l+ i. n3 O4 Q% b# [- u
- $content .= 'TITLE:PHP研发程序员' . "\n";//职位
* S8 P; @; _& }9 V; e( Y4 ^ - , q8 Q$ g& X) b* D& _9 \6 p( T
- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话, t5 r5 Y& g* } t+ M
3 b! Y4 B# u) j, F0 A8 \- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址# G9 E6 n2 F: T( n0 k: c9 v& b5 S
- ' i9 Q5 R& g/ [/ z6 t& c9 x
- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)2 X2 c o7 Z9 y0 t1 a/ y
- % J, }+ c- ]( E) @
- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话
5 ^& @# ]0 ?1 q
l. j6 Z* i/ ~2 j7 }( l- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱
9 G7 y x* C/ U - + h" {# P0 r! [+ b/ `! j8 X
- $content .= 'URL:www.baidu.com' . "\n";//个人主页* X/ K4 M$ y; }% M8 x7 y
1 W0 }/ v, d7 H. k: I( f8 G$ j: [- $content .= 'END:VCARD' . "\n";//结束标志
8 x: I) x" B# e8 S - & l) w! ?: R4 q4 e( I% S
- QRcode::png($content);! B5 v# `- d" i, S. U/ I9 a5 f( J
- & Q6 `4 \: k Q; M7 G! {* d7 w9 S
- , [! x8 e' i; T1 m
复制代码
" C6 H2 h9 Y. H) |3 A相关文章推荐:% d1 O! i7 k0 c
1.PHP生成微信二维码实例
3 X- S: i3 P5 E2.php网址转换生成二维码6 N$ r$ } F$ Y* c
相关视频推荐:. B# L F: x- K ~. h; h2 L
1.独孤九贱(4)_PHP视频教程
0 v p: L/ Z4 G+ b$ [$ N' k; q. m二、JQUERY生成QR CODE* _0 w8 C% v$ S# Y7 q# I' {
源码地址:https://github.com/jeromeetienne/jquery-qrcode
$ L4 h2 n _# T8 ~; r" Y4 s) l! c* o- H/ C
jquery_create.php: s6 f& o; J3 K# p1 w. V/ n7 Z
5 v1 e7 Q6 W) b5 R. `- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码
6 L5 m+ m: W) D: i# P4 }三、PHP识别二维码; n. B8 v% G: R% G+ a
1、方法一
+ V" j! s, }4 x/ G0 @环境需求,安装如下扩展 t0 N4 d3 Z: J0 U1 X0 j
- ImageMagick
2 N- k8 j: u3 w3 o- zbar
6 J/ O8 g% w' @8 i0 p- php-zbarcode3 w/ E: }$ j+ B+ M7 x! n7 V( @+ _" J
! ?$ T( r$ f' A" F. U/ F
2、方法二 Q, ^: D. Q) Z6 I; [
PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以
+ c8 }6 {$ [) l2 @qrReader类:https://github.com/baagee/php_QrReader9 b9 A8 @9 J" Q0 u7 v3 u0 T4 |& c
/ ^* N0 b7 O* \) D8 k* N$ p- ) ] d9 y$ n. I# Q$ |6 c7 t
- $qrcode = new QrReader('./test_logo.png'); //图片路径* f, \; Q1 ^4 m9 ?; U* T" \# c
- . c) i0 D6 O: o/ q
- $text = $qrcode->text(); //返回识别后的文本
4 |% k% X! o0 L. ?9 u - , G) `% T* u: [9 v- S6 V
- echo $text;
, j7 L; S: M9 o& m
7 C$ i. e$ r; n4 @" _1 u
7 {5 ^& d. d- i4 V/ P
复制代码 5 `3 m* j$ z9 r; A! e7 C% x
链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7
6 b0 Y3 z/ q. n! s* z0 i% ]" i6 T, k* R; a4 @- n
( y& L+ [$ T! B6 m, Q/ c& y& T
/ ~8 ^' ~8 t. O- o a
' C! {5 ^. {: `4 n4 U
0 n5 x* n: ~$ }& U; |: X( ^
* n: z; I7 U+ F% ?- n( t
6 w. c, J" X1 U( s: X6 U# c6 Q4 k0 N, x$ ~
( e! B0 p' C+ m' H) M
|
|