管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。% z" B7 X, `$ D+ i( s9 W
---------------------------------------------------------------------------------------------------8 H& }- W" C+ g1 c5 f/ W
二维码的分类' ? Q1 ]2 ~& ?! f; J, |2 n' e
线性堆叠式二维码
3 Q8 W% ~5 O* i7 S; H; i$ }+ Y
F* H& l, j! @* k6 v矩阵式二维码; k4 l8 p- D( o" \+ ]- _+ L. M
7 [3 m: M$ C1 X$ L
二维码的优缺点
' M; ^; w; j" v- K8 W0 J0 [0 l) ?2 T优点
: c! e3 F9 U! u; L信息容量大: M _. m" i- G) Y' X5 z, f- R: y
; c. [+ W1 y, T) I" y/ d% I- j编码范围广) j7 ~# U' a, }6 T
h0 R3 L7 j2 w容错能力强
. I1 k& ]* \& B' ?& I8 x) {/ L Z: L; {$ N
译码可靠性高- r: W, G+ a6 C( @8 g
% ~* a# K: A& U可引入加密措施
* v" k& V$ D$ K$ V7 f r, U# R1 {6 K; ~! m3 q) Q+ J0 M
成本低,易制作9 V& ^" s j- P9 O! ?
1 f* w! j0 G. w6 u1 Y+ l, j
缺点
. n1 ~: ?3 z0 }2 G1 o二维码技术成为手机病毒、钓鱼网站传播的新渠道6 Z; l* b7 d# ^7 u c/ c% k1 k
# v8 q5 L3 t9 ?. C: ]0 _7 p; L信息泄密" T) n4 R, e! B5 n+ J P) @# C0 ~
& @9 w# N6 t6 E7 I% p% @目前流行的三大国际标准
- S2 P# |7 V1 yPDF417:不支持中文5 @1 k7 z' G. Z8 i
& V9 J. c0 l7 S' K: I! E: \DM:专利未公开,需支付专利费用
; J; w1 ?8 F. |0 u- k& ?; {. @9 G) j& Q5 U
QR CODE:专利公开,支持中文
2 _# ` X' K+ `1 o' @: g
. h3 D0 X8 q4 h* E l, EQR CODE 纠错能力7 Y9 C# r9 L: U
L级:约可纠错7%的数据码字3 Q, M# C" N0 e
0 b. D" y" q$ f7 _
M级:约可纠错15%的数据码字% {( g0 {5 ^3 V6 U3 L# @& s4 r
6 b& ^2 k* S0 g& U
Q级:约可纠错25%的数据码字; m w! L9 N' I& A
" D# ^5 ]2 B% s" K* RH级:约可纠错30%的数据码字5 U4 ^. F9 F0 L3 q( o
6 Z6 I" J S7 P8 j1 s9 F; n$ N# i/ c1 g
前提条件
/ D, g' I" l7 w6 {GD库
' B& Y% _+ s4 z6 z
" b+ }4 J- c- [) R, @& s6 w: i一、PHP生成QR CODE' R( x3 T- R8 a1 n N" }9 b
官网:http://phpqrcode.sourceforge.net/
& S4 K6 [0 u+ t3 ^, i3 Z+ H6 ?8 W3 z9 B( M
下载源码:https://github.com/endroid/qr-code( Z j2 |7 Y1 q8 K+ d
" |+ l# u( y+ c9 s8 m0 p& S+ [* V目录结构 l! ^. U M* Z* W. G1 U1 f
/ t/ z( W K0 t- u' M+ ~
% U0 Y7 _: M2 W4 B y/ W* l& @1、qrcode_create.php4 O: A+ Y. c& x9 F, M- h! ?
ps:生成普通二维码
7 f- B1 t& M8 J7 J- 9 g3 p8 X* j$ V3 W2 S0 I
- include_once "./qrcode/phpqrcode.php";/*** V! M: g1 F e2 v C' n7 K( `
- / _' ?$ {9 {+ u" V) H! C! t- e
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径
( ^' t9 T% V1 z, N/ G! i
& ?; N% z5 j0 Q# ~9 \8 r: ?6 E* y- * 在浏览器上直接生成一个二维码(内容为abc)
% N7 W7 w- q, G- ~ - # A6 U: N" g" X9 [9 q
- */QRcode::png("abc");3 p9 l. y3 s( R* r1 J4 o
+ u2 r3 s+ |$ }1 \0 L& w- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**' e/ \& z0 Z- F1 \) Z- }( y7 P [
* t4 x3 u- R |2 z% P- * 生成文件到本地
3 n% r5 K n% R' f W" {* g+ i7 Q
; r- |8 d; t$ S6 v3 [- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)
0 d2 i/ O% d, t: \ - 4 R) E. v: C+ K7 B* }/ U
- * PS:$saveandprint源码的p6参数做了修改
/ D Z' v. L! V - % I5 R( S4 t8 |* J& ?: |0 X
- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);1 z* E! A2 D, s4 N$ x! ^6 a
- 6 V( S7 ]* J: C+ \; c. P
9 }' T; ]& S P& H- {8 \, G
复制代码
% F" G8 V& ^! W0 g% c2、qrcode_logo.php
! g4 I0 v. x# ?- K' s/ [% Lps:生成带Logo的二维码- + |% C* l" `4 p0 i
- /**; Z/ S; [3 X9 x9 V1 y7 z1 s8 E
}! b' ?6 J1 A* S x ~, z t- * Created by PhpStorm.5 d% s# q$ ^; [! _& M7 t( ]4 t
- " K, P- X* Y7 y! u# N1 m
- * User: user
& L% y- E! Y# Q6 T# V5 d4 n& O - + D5 H; g# [" n' s) A+ m% H" z
- * Date: 2018/8/16. R' M8 U1 \2 T# G
9 p& }$ f b P7 J9 [- * Time: 10:43
0 p9 b# W6 w3 ]0 R* X/ o: s - ! d0 ]9 S' f, }- G4 a
- */include "./qrcode/phpqrcode.php";$txt = "测试内容";
, \, a; B: v: g - " ]% { L- Q4 i4 d
- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称! l* @4 n, i$ T4 d1 L- G; ?
- 4 W$ R4 k; Z; P& w% X; [ u6 d. U
- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是
E `5 t5 A; f! Q! c9 Z
" ?/ l! P+ l$ q! M; w" o- $margin = 2;//边距
1 X: k! z2 h }) M: ]1 E& K% P
0 C0 U, p E4 @; E G* P' n" f- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片
! n: l B4 g3 y+ k: v - 0 S: e. h& z; M
- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){
6 w* j$ }% t4 W! T
) G2 P1 @+ ]9 b& S+ m- $QR = $picPathAndName; //已经生成的原始二维码图, g: _& J5 f1 }" ~- i- H$ s5 D z
# T' Y) K* S0 O, d& t8 {! {- $Logo = './pic/logo.png'; 9 d: R9 X. K+ F& Y, @
- $ `, y( [3 \! Q/ r) J
- $Logo_re = './pic/test_logo.png'; / u/ H4 j8 M$ R
- 8 t. h. k0 D" `- L% V0 B
- $QR = imagecreatefromstring(file_get_contents($QR)); ; p( E8 I/ S- B
8 c. v$ O) Q; _6 D+ `3 u% J* C- $Logo = imagecreatefromstring(file_get_contents($Logo));
) j: ]9 b+ P# [8 T. `
3 {9 @% @' e, o y& s. m3 C- $QR_width = imagesx($QR); //二维码图片宽度
6 l, N' T! Q( E* q) }. C
4 X; G! ^2 N0 a- $QR_height = imagesy($QR); //二维码图片高度, _! [: [* c- s3 l; D k
- ! h% v0 v/ e# I7 f% z# `4 g2 T# l
- $logo_width = imagesx($Logo); //logo图片宽度& i* v0 N. g( d4 _: U3 v& O
! b7 {9 x4 \( D5 I: G7 F- H- $logo_height = imagesy($Logo); //logo图片高度
' x A r3 |% v% L+ ^) X; ?' E - 4 p! e# N7 m* @' ]
- $logo_qr_width = $QR_width / 5; / f* Q6 L4 O. L4 c; f6 a
6 j# I/ b* b6 A, w3 d( Z- $scale = $logo_width / $logo_qr_width; 4 P' b) E/ ?2 t; Z+ x7 A
- * e( A3 Z( E: O% P8 I
- $logo_qr_height = $logo_height / $scale; / \/ O/ m# L' S* [& m8 @
. G! W* k: Q3 Y. j/ v6 s- $from_width = ($QR_width - $logo_qr_width) / 2;: w) N ]* J1 L
- 8 g" u) E- a9 Z/ J6 M
- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
7 ^! _5 y1 n1 J. n/ [ - 5 x: R+ T! X' Q3 X% s' j& g# e
- //输出图片
) M, N: U6 W ~' F+ e/ P- B. D - " f) E$ u s2 I8 x$ u
- imagepng($QR, $Logo_re); g, M+ Q3 Y- p
+ U( K2 C) L: @# ]5 e9 O$ Z- }; J2 N+ v }1 ?7 G+ c
: ?" Q/ Q, P/ j# w1 S7 b
$ e$ n$ ~3 j2 S& E
复制代码 3、qrcode_vcard.php (生成电子签名)
: E$ l+ c- C9 v: T5 ~& q& f/ X7 S7 A9 K% Z" A" z3 w
vCard格式:https://zh.wikipedia.org/wiki/VCard B# Y# ? _6 s3 \
, r3 d% k q8 }1 K0 C$ d; n; g- + ~. u& u9 q. o# D, c+ Q
- * Created by PhpStorm.
# U; |# x- Z! ?9 b' F - 9 Z {( X& q8 o( a( S* \
- * User: user
6 Y( E/ d8 f _/ Q$ ]# B - 7 m# K% Q- `1 ^
- * Date: 2018/8/15
7 l/ y- }3 Q) e7 @5 a2 Y" z6 B - $ P1 P* z, H i+ Y& d; ~
- * Time: 23:001 I T$ D7 r' m) K) H* V/ y: [$ ?
- 8 ~" u2 J9 v6 F: Q3 F, L
- */require_once "./qrcode/phpqrcode.php";/**2 `5 _1 W) g, H
4 f8 O1 t, A1 z/ K3 v- * 生成电子签名
* t8 T$ g6 s4 ]* x- @3 w' A1 p( T7 n - % C, _$ ?+ q1 a% W, ~9 P
- * PS;使用微信扫描二维码
& s; z, m; \; j" O% O
. S9 W/ e5 m4 {) c* ?- */$content = 'BEGIN:VCARD' . "\n";//起始标志
$ n$ z+ L" T) j/ D# ^ - ) I* ?8 ?2 g8 ]8 \: d b7 S2 t ?
- $content .= 'VERSION:2.1' . "\n";//当前版本) C* l7 h2 u; u: C- B T7 d! Z
- ' s0 t1 M4 E( F* f* Y; K/ f
- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名7 q, l6 L# V2 i( d/ h W V$ ? z8 W( K
- R& y4 r2 S2 R; T7 R+ `- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称
2 W3 J0 ?/ Y' w
6 |7 x6 _# C' `) R# ~- $content .= 'TITLE:PHP研发程序员' . "\n";//职位+ X9 w! [% |. I
& b% S6 F2 a F2 \# p- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话
5 e" f& E4 c4 c0 j7 \
& T2 B' s" K$ c* h2 e- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址 D* ?8 |; V: s; w! z, ~. d& p0 X/ G1 G
- 1 _# b P" L0 {( A& i) }. R, m
- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)0 s; Q$ [8 l# E* b9 X5 e
- 6 g. K# q3 `0 J; d
- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话2 v# K1 p8 I* O# I+ m5 l
2 h: {% q1 a" O+ a- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱 T$ v2 o3 e- Z0 s9 H
- ( G5 B9 Q' N. T7 d- C" s
- $content .= 'URL:www.baidu.com' . "\n";//个人主页
. N2 v' E0 y( v% ? - - v( l( I) C" _: g# y- b" b
- $content .= 'END:VCARD' . "\n";//结束标志2 z" L2 d6 U; ~' k
- 9 K2 K& _ ^7 s4 g6 ?; \& K
- QRcode::png($content);! z. P6 |( Z( i$ j2 |. z
- 6 S, z7 f t0 \; |7 t; a
( m6 p2 }! s% U2 R
复制代码 1 J3 y# t1 x$ M- D) H: m
相关文章推荐:! o- \8 K) s0 I4 W
1.PHP生成微信二维码实例
8 a2 o0 p' j! {; c' W# m* |7 T2.php网址转换生成二维码
! W G# W: x- ]9 T% \8 [7 D, m& f相关视频推荐:
9 u. {$ p+ s2 T% i1.独孤九贱(4)_PHP视频教程
# F4 ?' I: ?- }9 }! b$ ^: T二、JQUERY生成QR CODE3 q5 I2 J& k8 B
源码地址:https://github.com/jeromeetienne/jquery-qrcode
% A6 E. v( W9 p+ ]- T$ D. D. M( g7 S7 d
jquery_create.php2 {+ b4 F1 v9 q6 ?
& b3 Y$ X' F0 {. |( Y" V9 Z$ G
- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码 $ b2 C4 T* Y9 x3 T% K9 ?/ X* ]
三、PHP识别二维码
+ T& l5 a6 w: X# N0 {1、方法一# V& D% Q5 J/ k: u! s$ W _" G
环境需求,安装如下扩展
" c. ^! w: `9 S. P9 I7 g- ImageMagick3 m7 j3 u" h% A8 c2 k
- zbar
6 X0 n2 ~* @* ]) I* p- php-zbarcode% ~2 A7 b& M+ Z2 p0 h- k4 h
( a- Y' ]- D* o9 U
2、方法二
$ |$ s8 s/ F9 Z5 q5 Q' `, V r- ~, lPHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以, T1 m) L6 D0 Y7 U
qrReader类:https://github.com/baagee/php_QrReader4 c5 Y- B9 ?" u# d" J/ z6 w8 @
6 t) B' |0 D( a7 Q& q
- 6 b) T; D1 d+ e: _0 P
- $qrcode = new QrReader('./test_logo.png'); //图片路径( B* K- _/ Z4 b' `- ?; t# ]
- , I$ g: {) ]" ~& [
- $text = $qrcode->text(); //返回识别后的文本* s# N# K9 S% i0 D" Y
1 ~- o4 A; g5 f( U7 r7 k0 ]; L- echo $text;9 y8 M5 S4 p; [( {4 ]$ y
6 W B9 ^" E; d8 p
- U5 ^/ I0 e$ O3 f; B
复制代码 ( X8 c% z7 \' {* A1 o7 X
链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7
2 \/ [' v) f% c0 Q, c. c1 a8 f7 e4 p' _0 a! H( N1 B) M# J
c z( t7 q9 O
& M2 }0 x# x% {" k* M
; Z' ~5 _8 s9 z- \: I- F. p' A5 K1 e1 n: j
- X' M+ t+ U4 o
7 m. @% y5 f, M% y8 Q0 f
/ x" G3 s+ Y s! R8 }3 D
6 C( m, w/ ?6 n6 {8 ? |
|