管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。$ b# S8 z9 P: Q$ }% o. u
---------------------------------------------------------------------------------------------------) M2 Y, ], \! q/ J+ \
二维码的分类9 }' f+ f% w% Z
线性堆叠式二维码* t* R5 u* n$ P. D
2 S0 z6 m! j) y; u3 y矩阵式二维码; h! ^ i. l8 E2 }3 S+ c7 a6 |
; Z* M( z8 W/ h3 N' e
二维码的优缺点
3 C4 [1 t: a+ c; Y2 Q优点
6 {" a6 O/ F- c6 Y( a信息容量大
- ]5 T& N5 ?5 B# O) R8 D, G7 C
0 l- e: q% S3 B: K" D/ g0 D& h# E编码范围广/ K8 _7 A# `% I$ ^; U8 i
: P: q" B( h/ A
容错能力强7 B2 L3 t& P1 ^/ M. I- G" ^
' C* x$ X7 Y1 @( g0 f0 Y
译码可靠性高# A$ V% |. r- w" U4 {; Z. H
' Z; q1 {1 C. }6 T
可引入加密措施" ?, {6 {* y1 }) |
' q/ ?" w/ e' G
成本低,易制作1 W+ K( ^6 R$ E& J
7 j- u# @+ p3 g4 C& K
缺点
, J& D* p7 P& v# t; V6 i二维码技术成为手机病毒、钓鱼网站传播的新渠道
( F/ p3 L' F! }/ H9 o+ x! N, F' E1 H! ]& V, y! _
信息泄密' o+ b6 u0 p# c! G& y. `% T
1 a8 v1 V! c) X8 m+ e! g- e* U
目前流行的三大国际标准4 `/ S% B/ \4 W Q% P9 k8 `+ o- S- B
PDF417:不支持中文
- b6 f* r* H" i G y& ?! \4 c& V0 \1 d) F( G0 k
DM:专利未公开,需支付专利费用% m0 a0 \" @6 i4 y$ @; p
5 V0 o K+ n/ c$ ^; T3 S$ ^
QR CODE:专利公开,支持中文0 X- G5 v3 y: D, w, B
- Z2 [6 `: |( d' Z3 K
QR CODE 纠错能力" W; U& a: @8 V
L级:约可纠错7%的数据码字
# S+ d, ?/ V- b* H- o; D3 \# h: u& D- \
M级:约可纠错15%的数据码字
) A0 U2 k) w# Y% \) O& M/ i: y0 n5 K9 {; o8 M8 }& e/ J
Q级:约可纠错25%的数据码字* \9 T2 H3 l- t2 p/ f& i7 `
^ ^7 n4 C) O! y2 E0 r- \
H级:约可纠错30%的数据码字0 g1 H+ C( @# c( K$ v" z( C" |
( N+ Q( b. @1 F+ {7 \7 _& T7 i
前提条件
* s' m b( f. b1 \+ u, cGD库
; w" r3 E* H2 m2 t, q7 q* U& X7 _; p( ~! J1 ]4 G
一、PHP生成QR CODE! e4 b7 D2 l5 k; @- F2 A' _
官网:http://phpqrcode.sourceforge.net/
5 c0 P7 x8 r$ y$ C" |
& n8 ?3 e% e7 v$ s- y- m* O下载源码:https://github.com/endroid/qr-code
5 s* i3 [. I) |0 m3 w0 T) R- N4 B
) z# `. ~7 ^1 D$ u w% v1 \' h目录结构
' y0 e" X ]* K3 W
1 }0 O. {9 Y9 d4 x, U
b4 Y, {! U9 d/ L" |1、qrcode_create.php
- {# {' K: p$ c% Q- E- {! ]0 qps:生成普通二维码$ G: ^+ Y7 O0 E7 p d9 f4 J
- 3 `3 c. {& T8 |* l' j, j. \) z
- include_once "./qrcode/phpqrcode.php";/**1 Y5 h: y- R0 V, c% w
- 7 i6 `7 y9 }) h3 |" k
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径
2 \4 k: o; ?- b1 N0 W! r, b
) M! w0 X/ i( V# d- * 在浏览器上直接生成一个二维码(内容为abc)
. k+ D* L/ `1 ~' D: c- K - " p2 I6 ?) V& k/ G# z
- */QRcode::png("abc");
: V) }9 V& {: |; b* p3 o - * V% ?) w- D, V+ D% T
- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**3 w3 }) b. i# G, M" @
: x' {6 s" X0 k o. m- * 生成文件到本地9 V `3 i3 b, u- D/ k7 _8 o
9 Y7 [) P a3 c' y; S: ~- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)
7 \% C/ t0 D3 v7 o$ A. e - 4 C* E- f/ ^, V" r2 L
- * PS:$saveandprint源码的p6参数做了修改8 |8 Z a8 h1 Q5 G8 \
9 d0 b, g5 `9 K% t0 [6 C; A Y- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);+ I; n! t& ^+ z3 U" H/ r% @# ?5 ?
- ) a8 C) X/ _4 v) G$ a& R }. y
- Q i" E. }' u3 y! Y# [
复制代码 ! T2 @: l6 w6 G0 ~
2、qrcode_logo.php
( i" I# G$ `1 @ps:生成带Logo的二维码
' t. }1 M# h% C, M- /**
! {- X. b* t9 U5 m6 ]& s4 I
! P, Y+ [7 ?. V3 J, \4 A! n9 N. ]- * Created by PhpStorm.& t. Z; U( ]- r. a& Y/ ]# k3 a# {
- * H( y3 U' v1 ]6 O- G
- * User: user L, J( W6 ]3 K, r0 j; ?
0 x* o# O7 x1 A+ s- * Date: 2018/8/16& k1 m4 [( y4 k! {
- : a1 Z8 l; [9 n
- * Time: 10:430 ^7 u U/ M( [% w+ E
* f) X8 k. u% j' l1 n- */include "./qrcode/phpqrcode.php";$txt = "测试内容";* B H/ Z2 M$ ^+ I- C w
- & w1 |' {1 s* u
- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称! O0 g) ?+ E4 w0 L% U. v
- 1 G+ d* f; F* O+ ` {3 {* P
- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是: R/ N; r% i9 J; k( J
- . F- Y0 Q9 H& d
- $margin = 2;//边距
5 a' |* o$ ^; Q3 q0 S; Y2 e - " q( r2 s* E6 Q v( t5 L6 W* R
- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片* [9 _4 h/ t% q
- H: L$ F$ p3 Y( o+ K2 X- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){
2 C3 f# R2 j# d/ j, L5 h - + P) T9 @! B' |6 Z: g& x
- $QR = $picPathAndName; //已经生成的原始二维码图
& ~, }. x1 @) X+ t+ W) I, D - 9 Q" F+ ]+ T& J+ H+ c. X; C
- $Logo = './pic/logo.png'; ; p+ x9 V0 c2 ]! m9 m
- / {' _5 x: v+ f
- $Logo_re = './pic/test_logo.png'; 8 k* ~: z+ t& b4 A5 b8 W+ N" M- q/ C
5 y( p& q$ Z. k! ^- $QR = imagecreatefromstring(file_get_contents($QR)); ( f9 D) s5 g& x( \* }( Y' F
* c4 V. [4 p# u3 w: J- $Logo = imagecreatefromstring(file_get_contents($Logo));
. M) M- q7 l2 U' f( e- c2 G5 h/ Y
- ^. N8 z; d) l6 m2 C- $QR_width = imagesx($QR); //二维码图片宽度
" t. H9 y D2 e) O
# d- E" f! G( V5 y! x) k* ]4 `- $QR_height = imagesy($QR); //二维码图片高度; ?7 D: M2 N) h) y2 J \
* c% n i+ _# Y+ d8 k! S. D' G- $logo_width = imagesx($Logo); //logo图片宽度7 [- e W& h O5 Q, H5 J
- % P+ }# m% G/ s- s' g
- $logo_height = imagesy($Logo); //logo图片高度# Y5 G( z$ g: ]; O5 o
- ' C: U7 }6 p/ }3 h, t) W7 Q
- $logo_qr_width = $QR_width / 5;
% ?4 g: _* r/ J& k' }7 G - ' J. o/ R, K8 x% p+ ~- B2 t3 ~
- $scale = $logo_width / $logo_qr_width; + N1 ]' M a! Y
5 J1 `3 d% {6 {! i- $logo_qr_height = $logo_height / $scale;
% y& e" q( M4 P$ c) g" k& \0 N3 ~2 o
+ s" |! m! l, R. R& y0 |- $from_width = ($QR_width - $logo_qr_width) / 2;% Z+ z, J2 _2 d0 d) d: h* k, L
- - E4 \9 i0 y/ N) {8 P, v) g
- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height); ) F& x7 w5 D* R( |) U7 e0 T3 Q: r
- ( W% J" e& f4 k3 p& L* ^
- //输出图片
) j; O( x# p7 c) y& c: A2 i# m" U
4 @9 e) g |& L6 v- imagepng($QR, $Logo_re);" B, y$ ~5 T- h3 u+ `
- ; N" \7 W9 Z% W' ~
- }
6 v- @$ n' p W- u! w- G& b' P
2 k6 }1 {" [- d* ]: e8 X( B8 J- 3 m1 d7 m. G+ R
复制代码 3、qrcode_vcard.php (生成电子签名)
$ ?+ S7 m N& a1 p F. d8 L" j! A, b" c. ~8 `& t+ B$ X* |( W; i
vCard格式:https://zh.wikipedia.org/wiki/VCard0 n0 ]. _' r4 P8 }
/ D# T9 y. L: _& X( H
6 M# E& Q* E, m4 R( W- * Created by PhpStorm.
" j8 R: ~& F# n5 o/ W9 V
" I, N! U& Q% A9 K- * User: user6 \1 Y( m& ?$ x" u; Z7 r0 m/ R
+ u0 x Q. m5 } ^- * Date: 2018/8/15
2 l }) p& k4 Z' t9 E! x - 1 \4 Q/ K' U- T" `" Z6 x
- * Time: 23:004 Y5 f1 Z# m- i5 O1 k
G: L- v# l; w' O- */require_once "./qrcode/phpqrcode.php";/**- t7 }: T4 L. }( E5 E6 t
1 b }% h+ i2 l0 s& X: v- * 生成电子签名7 ?6 L: q( \+ r6 A
- ( t; |9 b( N0 x# D! L
- * PS;使用微信扫描二维码' M1 f& D; e& [
* `; X8 I. a5 T7 F, `6 V. V- */$content = 'BEGIN:VCARD' . "\n";//起始标志& [% e' Q( Q( }! x
- ) P7 B( h% d1 r0 Q
- $content .= 'VERSION:2.1' . "\n";//当前版本
# F) C: \+ j5 j# Y! R* Q+ O4 r
) C! S6 j, T, i8 X: K8 b- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名
' a8 l% L1 e; r' j b! m- ~2 @
( E9 P) Z4 I5 }! }: ]- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称/ G7 _( f$ f9 E5 I9 Q+ r
" m! M( U! E2 X+ J' Y- $content .= 'TITLE:PHP研发程序员' . "\n";//职位
, W- R8 g7 u p4 c4 @, A
8 y. s6 ]! ?( r% w+ Y8 N- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话. H- \9 i/ v4 o! s- O) f
- d( i9 l2 y$ }
- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址) J& R3 @; O/ N" R, G4 z/ P8 e
- " Q0 @$ C: |/ R. g3 |
- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家); }& V5 W9 J/ U
0 l8 n. d/ t9 I3 [0 O7 F- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话
( ^5 z q$ Z$ ^+ \; S
$ l1 C/ n/ ]$ k' {8 o m% j- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱- z% h8 Q7 _3 t" F1 t# s) H
! `( W; n8 i6 V) |- $content .= 'URL:www.baidu.com' . "\n";//个人主页% h o0 T6 h3 Q2 S
' ]% b, F) C/ Y- $content .= 'END:VCARD' . "\n";//结束标志
) E5 u" v9 R. l$ [$ r - , z/ F: k% `. e/ \; u" H
- QRcode::png($content);! M2 z% j- x# |" c+ w
- 1 Q/ \) D: H/ Q
- 0 j7 |$ Z$ k# w+ N. k, q7 C
复制代码 $ P1 g6 G* r4 k3 p" Q* G
相关文章推荐:; N! l+ u9 u: C% h- f* F/ Q9 m+ b1 B7 O
1.PHP生成微信二维码实例% W. d" c4 n4 c$ z
2.php网址转换生成二维码
8 F6 C0 }3 ]0 J! q& u相关视频推荐: p2 v+ D" \! @7 ~! y5 U
1.独孤九贱(4)_PHP视频教程
9 ?* N8 \9 Y D6 k: b二、JQUERY生成QR CODE3 X6 l- J& T6 Y4 E( P
源码地址:https://github.com/jeromeetienne/jquery-qrcode
+ `0 y- O8 Q& f8 U( G' P
/ c G5 b5 w" @ O+ v4 {/ I1 wjquery_create.php
* i: S* n- g* N; E2 [/ @! `1 ?7 L5 K1 P
- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码 8 k X7 g# y- A' @ i9 N
三、PHP识别二维码
/ y# j2 Z5 N( _" Z+ }7 O7 r/ A% Y1、方法一
; ]) j% i. g& l环境需求,安装如下扩展9 |5 o0 |% J2 }6 P
- ImageMagick
`9 I0 l% H* O* z. J- P- zbar
$ O4 Q' y" j) }* `4 d" T- php-zbarcode
$ Q+ o. f) B. z/ Y9 @* E9 l9 Z/ [1 v- z' T
2、方法二
- Z# `8 o. F- q: hPHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以
" |4 N$ G" y P; C& |qrReader类:https://github.com/baagee/php_QrReader, B1 a& b6 |7 l5 U4 ~* p& _+ Y
9 W" E9 h: b( T0 n- 6 d/ M( r" s1 q$ v
- $qrcode = new QrReader('./test_logo.png'); //图片路径( \; @2 F3 v/ R& t7 e6 ^
/ g- ~ b, T$ Q& v+ R# R- $text = $qrcode->text(); //返回识别后的文本
# S6 w8 b/ Q0 C# v - 8 k2 t5 k5 [% c( e L8 h' ?. z" M* ~
- echo $text; N S0 P+ q" k R! ~7 v
- % G$ p! i& d/ x) ~
/ ?" [ V% b" \
复制代码 0 Z( H( q6 P9 V6 X; W
链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7" G& h( D k) @6 r8 {+ j+ j) c
: ~$ W' R+ u0 t- \' c* Y' |
: N) w- l6 m2 \. I9 i% G6 `
; D' r! ^: U7 F8 t# D* k' N( K
( Y1 f9 I4 r9 p- W9 k# [
2 F# X2 I3 I, p1 _6 s, j! r( m1 K1 E: s7 a
) ?) ~. @! ]# Y) G. H1 N/ J% E* u4 ]2 O+ E
# g* k+ D( |# d) B( f$ m |
|