管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
' \9 d+ @& y6 N4 V* [& ^1 N* q4 p---------------------------------------------------------------------------------------------------7 _2 C. o7 e0 y. _9 B
二维码的分类
K2 g% g s+ W2 n$ W! p% g线性堆叠式二维码9 `# B% e% ?7 T; N) e; Q+ o- I6 r
+ T9 @ {( U& b9 n8 P矩阵式二维码" s7 h2 |. o6 G) W6 l# w) P( T# Y
& m3 K7 G( \8 `8 A
二维码的优缺点! e- h, m1 i1 E8 M5 }
优点- v, l0 d/ I" z- k
信息容量大
( z( J8 M M' y8 S" s5 h$ }# z7 e# m
编码范围广
4 L& e; ]+ V& _5 ~7 G% q. c% \0 Y& I, k% j2 x
容错能力强
4 A/ d) @% |/ k3 N% N1 e/ C
) p" x7 b/ d( Q8 `! {9 i& e* o译码可靠性高( r# ~+ N; x- F; Y: r
: r2 j5 u1 j: j! }4 Z E可引入加密措施+ @6 c2 i- Q/ Z u
. i, K# P* y; R6 ]& ]4 K0 M# D
成本低,易制作
+ R9 x0 J! r) r3 T( [/ _2 Z1 B) N) [! p
缺点6 i7 k( ~9 c" u- z. s0 ?
二维码技术成为手机病毒、钓鱼网站传播的新渠道0 j$ R7 ]6 Y6 j! T" @! G7 ^
4 ^4 L8 v I8 z) k$ }
信息泄密
8 p( A. o" M+ [+ E# w: H3 p8 Q7 @+ J9 x9 h
目前流行的三大国际标准9 K3 W$ A0 s8 K# q+ n
PDF417:不支持中文
, z+ M& b. o) l+ }# X1 T9 Y7 `' c; w, F9 a
DM:专利未公开,需支付专利费用
5 }7 m0 K' @ p7 t6 M% ]: ]/ ?* ]: }% @& a. L
QR CODE:专利公开,支持中文* o3 I2 T. c1 ^, E% [
4 t1 g! S$ Y' Q6 c* UQR CODE 纠错能力
. M6 ]' q' j0 Q& R) lL级:约可纠错7%的数据码字* B1 s5 ] ~9 G2 F) D$ B
5 ~' Q- M# B! t: w7 Z: h$ Y
M级:约可纠错15%的数据码字$ K. l/ c' @- z
* f* h. O v6 {- v1 |$ f
Q级:约可纠错25%的数据码字
; d9 \) W+ K; L3 C, i
5 e6 n. r$ q5 Q. d8 h1 Q) M" gH级:约可纠错30%的数据码字, X0 g5 E# e9 _% a9 N) B8 `
0 W' A7 Z* z$ W+ N前提条件
' G4 t% p, F4 g: @7 u- z( w. [GD库, P. y' L) w: _+ o0 }7 \# R: w3 X& [
3 i$ X/ G+ _( u3 z. P) M9 g一、PHP生成QR CODE" t. d) M+ @- h: B- p5 s1 ^
官网:http://phpqrcode.sourceforge.net/
/ r; y4 J6 L$ T8 f& p
( W9 o% j' n D; u5 a. `下载源码:https://github.com/endroid/qr-code
/ y9 V% ^; d8 C6 _# p7 s* Z: @' L! W$ B9 P: y1 ~3 l% R
目录结构
$ a+ K' P" x' Q
1 ]+ J" n7 r0 Q
; x1 H% B |/ ?- n4 J# A; q' Z
1、qrcode_create.php
9 w7 {: N/ D# _ps:生成普通二维码
. G i- d9 b, V+ g7 i# s% G2 c- : ^ g _& p% }0 H
- include_once "./qrcode/phpqrcode.php";/**! Q# Y: V& {2 a% P+ Y' d
- " s9 J* [7 ~ F: z
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径
: J, N& ]- x4 F5 E0 `. E+ ~
1 d; k `, E1 j, R+ t- * 在浏览器上直接生成一个二维码(内容为abc)
# z2 R( B0 u7 \: s+ F - / T4 N* y, s- V$ \
- */QRcode::png("abc");, y! n& [$ Q+ X: O3 Q
- 1 k$ H+ t* t# C! X4 W$ E, @
- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**
% G; A9 J0 ~6 E/ I5 _5 J- t6 s" X9 |
7 l: m0 i8 q5 l* [, o- * 生成文件到本地5 f* w p0 \/ c1 G# C: m
- 0 s8 B. j! X2 F. }) _, j( J8 k9 V
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)
3 p" g7 j# L+ O$ M) @& s - ( m% J8 C6 _) b1 h& i( Y$ Q
- * PS:$saveandprint源码的p6参数做了修改
5 H, I8 ?5 Y2 V1 I* q8 P9 c- e - * I: n Q+ A1 V# d X
- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);
) D* V t( m$ O( L
7 W% ]' ]" h# Q( @- t3 c( e1 Q
1 n( `+ J( A0 |9 ?6 S5 G( g) A
复制代码
4 ~" u$ _: x) U% {2 l& p- V2、qrcode_logo.php
7 N! v/ ^) g* F' m ups:生成带Logo的二维码
. W) }/ r+ J3 R& A- /**0 v- b% }& m' r6 q
1 f% A) K2 Q- U' C3 m5 F2 G- * Created by PhpStorm.6 i: ?8 ~" ]& z7 n3 c1 r$ `
) c, t7 }: F. B- * User: user* G. y! X9 Y! t: [4 T5 v$ w: z# z
- , y; w% F) ~1 j. {6 b; F% a
- * Date: 2018/8/16
' R; F1 w) {0 f% K' i3 N# x - 6 ?$ \8 O/ |% ]% Z/ Q; J$ U
- * Time: 10:430 r; H0 E9 d, A
5 |' g2 \4 N. z" I; Q0 A9 J- h9 K- */include "./qrcode/phpqrcode.php";$txt = "测试内容";
! e7 L+ J- l. k8 `
9 E9 _+ f% d% ^% M+ K. ~8 V7 `- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称& ^1 y6 ?; h9 ^# L
: q6 ? I& t2 f. {: X1 h- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是
# l$ `: \7 o# M - 7 V8 ~" o, x2 y, {7 S
- $margin = 2;//边距. m8 ^8 @/ ]* Z6 r6 w! U7 E+ s# E
/ R& w$ E+ t1 e3 ^- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片. w! A2 I3 ^3 F" u3 t& R
- ) N" }/ H. H8 l* u0 X. ^; M6 D5 |( X6 u
- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){
2 Y7 H% i' }; y* }! p, M( L: d - 3 C3 F0 F5 v2 u# v) v
- $QR = $picPathAndName; //已经生成的原始二维码图! I' v' ]: M$ p- n/ |5 S
) L+ D. X$ T- s1 l" _- $Logo = './pic/logo.png'; ! y5 Q% w# F: X
- [' ?3 e# t& O6 V! U
- $Logo_re = './pic/test_logo.png'; & F! g1 p* v% ~: D5 Y' [% a8 M* t
- 1 r a; B: O, z: q$ U
- $QR = imagecreatefromstring(file_get_contents($QR));
* f& e% [' W, Z. T" s - ! v2 D K8 h6 E( o: |* Q
- $Logo = imagecreatefromstring(file_get_contents($Logo)); ; o, u% n5 \3 G/ J3 t: L6 g
6 t" R! V5 p5 X R+ V* j' @- $QR_width = imagesx($QR); //二维码图片宽度
* G% g) V+ y& L3 U' ^, m+ p* A
2 J% D/ w& L# q; N- |- $QR_height = imagesy($QR); //二维码图片高度
7 V) c) I7 w! p8 Q" j/ D
4 _, C" `! o& n- $logo_width = imagesx($Logo); //logo图片宽度6 H9 \# V- i5 I6 Q6 a8 ^2 ?4 Z# @/ W
" ? ~7 g% X5 A4 c' K- $logo_height = imagesy($Logo); //logo图片高度
G" l o' c$ d/ |4 z2 t' C
' u* F! |4 c. b- $logo_qr_width = $QR_width / 5;
" w# O2 l8 Y. ~; w5 a4 }# [ - 9 h; j0 r7 _' U* j k
- $scale = $logo_width / $logo_qr_width;
5 ]7 J1 r' E$ _! y" A* |2 g, m9 Z
4 X7 E( h& e1 D& n7 }- $logo_qr_height = $logo_height / $scale; ) K: l$ T3 a' ^, V* L
- ( E$ ~* T; f6 `' P
- $from_width = ($QR_width - $logo_qr_width) / 2;
9 V3 Q, k4 ]# B
- ^3 N( G( ~: X. s1 a4 @- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height); & A' Y; o0 g) X5 X7 f. |: E4 Q
- 1 l, u, p* J2 c) t3 X4 m& t
- //输出图片
8 g, U. j% h& Z1 X6 B! t& _
" _" s4 Y4 |) l5 i0 L3 Y- imagepng($QR, $Logo_re);! H$ c; ~6 \- }: U8 X
, \% D9 Z* T$ ?0 V, ?3 N6 ^6 d* `- }8 f) _, E* I) O! c% w8 U
g" Q+ U- ^5 F( y. W
6 b0 g- x. U! ^# U" ~/ i+ Y5 Q: J
复制代码 3、qrcode_vcard.php (生成电子签名)
* y, `. [- C/ C
, U8 d' K2 R( v- L, M6 w6 z6 JvCard格式:https://zh.wikipedia.org/wiki/VCard" ?* _+ N7 L) D7 G. p! `
& X) {1 ^4 A4 s9 l# p4 {- 8 S( m, L+ r0 S1 [$ C
- * Created by PhpStorm.2 e D- }& U" G
- ) L% q5 b) C/ s, ~6 \, S" q
- * User: user
# Q" B% r! R+ g3 S) ^. D9 _ - 1 P3 d& j( I9 n/ q' g. M2 S
- * Date: 2018/8/15$ X+ P* \- [# v/ ?7 l% H$ w
- 2 @5 Y6 J5 F1 b O4 a: }
- * Time: 23:00; e! N9 D$ Z( J
5 g( l9 M% H$ b: g4 U$ I+ |- */require_once "./qrcode/phpqrcode.php";/**
, L; p8 g. P0 n, T9 d/ D) S; n7 |) o - ! P# E% `$ _; V0 E, R; ^
- * 生成电子签名
; w0 u% S5 ^9 v5 U+ v3 l
7 B! G6 j* d( i% g- * PS;使用微信扫描二维码: u6 f, H% |5 Q# n; m
- 3 u: U" [5 C) n$ W
- */$content = 'BEGIN:VCARD' . "\n";//起始标志& p" U# C5 w' r/ y; c& l; l
1 @8 L5 z# P1 A- $content .= 'VERSION:2.1' . "\n";//当前版本5 B- E& [ [8 O) J& _
- $ o$ E( X" ?8 T; f, `+ a# F& E
- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名/ k# q1 `% B% o6 M! t1 `1 y5 m# l
- : q- Z' A1 h9 x# U- Y! _4 A' C1 |
- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称 z% w8 f1 J$ m2 L; `4 T
k# X" s4 [3 @- $content .= 'TITLE:PHP研发程序员' . "\n";//职位
& r6 X/ {6 g% x* S
$ K; ]5 i) t! I! `' f: H' y- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话 f6 |+ i o- \2 C
- 2 S0 I* h. F+ x( u/ H+ }
- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址- N4 _0 |2 y" X6 m# x
- ' u2 d8 A1 z, y1 e' ]
- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家), ]3 [" M) c) k* t8 T5 R4 {
, y |9 T& d/ K& Z* x( E/ I' y& m- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话
+ T* u9 ?" t& r4 |7 q# K
: n+ c& }: \2 f M- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱' m( E7 G9 R) ^6 X
- - @+ J4 q$ K* `/ [
- $content .= 'URL:www.baidu.com' . "\n";//个人主页2 P/ q* c. Y& @2 Z" o% A
- ' u W! u+ `/ t/ U
- $content .= 'END:VCARD' . "\n";//结束标志
; u; N6 _. Z/ v+ ]) b$ n' F
& W$ h5 F% b; k8 _6 Z8 h4 ]- QRcode::png($content);
0 |5 K: y/ Y5 g `
- [9 F9 X' D. A+ ]- / G4 O- E- E# `3 M
复制代码 7 z! N$ ^9 ?6 }$ X
相关文章推荐:
5 |# p3 O6 [% ?: x: G1.PHP生成微信二维码实例
& ?3 l5 T9 N+ h5 P2.php网址转换生成二维码
% \* s* W" y$ @8 Z' [相关视频推荐:
; y6 ~+ k% @& ` r E1.独孤九贱(4)_PHP视频教程
# ~2 B/ K2 q/ f二、JQUERY生成QR CODE
% C, W0 G6 W( v6 n源码地址:https://github.com/jeromeetienne/jquery-qrcode
\; X' W& r( X+ y9 k+ Z7 O5 n, ?; z0 s: a8 v8 z
jquery_create.php
5 z% x% i3 {! Q! q/ [! |* H2 N: `; N# v3 [
- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码 - T9 ]7 X- C. Q- m% S" E
三、PHP识别二维码) x. R# t4 x4 @$ Q
1、方法一! E3 ]* K; b, E6 c
环境需求,安装如下扩展
/ Y0 c% W( J6 n7 e$ \" P- ImageMagick
2 R* F; ?$ x/ [# T- ~- T- }- X' ~- zbar: I( e) i& l! r
- php-zbarcode, {3 {, T h: i' j: f: @% X/ n, X
/ j0 ?2 z1 |/ ]* @" W
2、方法二
5 q3 a( F* w7 c& k, v' \% vPHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以% T# @2 p9 I) p; j
qrReader类:https://github.com/baagee/php_QrReader
+ _9 d7 ~' L4 z+ D) ~0 b
1 p7 S7 C8 q& D% j3 ^
! p: x {1 p, \ B9 Z6 X) \! t- $qrcode = new QrReader('./test_logo.png'); //图片路径6 |& h7 W# P, X4 l5 I
- / S' d5 x2 {* x- {# h2 G7 g
- $text = $qrcode->text(); //返回识别后的文本7 {& K# \6 x* e
- 5 r) D6 l8 M' K% j( n3 P( C, M
- echo $text;6 H& Z( P6 n+ z: e
- " s9 |, ^' e% x4 X
- 5 w: p k) n- T" G( Q/ I
复制代码 ! t) x+ x$ ?" \3 {9 e9 X
链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7
# d0 ]7 w+ D3 M, ^) A- A. f) X% v; u& H( Q
; z! U2 i: r0 y: t8 {" i; C' m/ b9 X8 E! w) ~$ ]
& Z6 d& p/ K. U1 t: T, z6 g9 W. H+ A( t; K7 b
3 b8 \4 T, ?5 n- y* j
! M6 d5 J6 D1 D' o, f
# t2 N8 v+ O& s8 Q1 f5 M0 l6 P- P% Q3 s9 d( _6 G5 @$ l
|
|