管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。0 T- e' J: {$ i8 t5 I6 @7 K3 q
---------------------------------------------------------------------------------------------------
1 B5 ^1 `9 O' R1 \% C二维码的分类
6 v, G' T! e2 Q6 q: \5 h: k/ O% x线性堆叠式二维码
+ W# E0 ?, W/ v% Z z% M2 A# D5 E+ Q
8 p- M; u( s$ P2 z' a矩阵式二维码. s# @ k T5 u$ A+ F$ @$ ?
* d* E! Z) P# F8 q2 t- Z. `3 ?4 r
二维码的优缺点: `0 y: t& ~7 r' ?5 W
优点4 |: O( J9 P' C: v2 _' ~
信息容量大+ e, i9 c4 w3 [1 }. V0 H) {$ l
$ m( R( J: I# F/ J; v" {! H" I/ g编码范围广
{5 E! ?1 q- _4 ?- m5 B* P3 z6 L- I/ S) a$ C8 y
容错能力强% D( S% N% K- C- N; v
9 P6 u! m. _- K% J译码可靠性高
/ L$ Q1 V* W& m) b# N' c" F, n, ~6 y$ [8 e) F, P6 Y: b9 Y
可引入加密措施: {9 |8 S+ x! W
9 B, Q( S6 ?6 C( Z5 U5 S; G9 y+ V) u
成本低,易制作
Y& M7 O/ S! w3 X8 }1 c
0 t2 E' U( v% O, ~! a缺点+ P: O8 l1 l4 U# N
二维码技术成为手机病毒、钓鱼网站传播的新渠道* k. ^; L# z( r* D! e9 Q% R3 @9 I
* k% k3 x9 v1 \( E
信息泄密
6 q! t3 C. Q- ] p
' \! t8 r5 n& a- M+ d9 g0 S目前流行的三大国际标准
7 t/ l# B: L7 U1 \. D7 LPDF417:不支持中文4 `. D; |/ \/ T; |& T
! y5 S3 H' O8 gDM:专利未公开,需支付专利费用
: H) I# G. g3 `# q1 V6 y( p: C o8 J5 Y9 N
QR CODE:专利公开,支持中文( l# r0 w ^# B: L' H
$ L; P" I( E" s0 E' w
QR CODE 纠错能力
: m a( w7 k! p& z, ?! ~! pL级:约可纠错7%的数据码字
" q* D* a4 O5 a: H5 A. M1 ^7 q3 D( `% U2 ]4 s
M级:约可纠错15%的数据码字
( n3 L# n5 j( ^8 t
+ Y- o" l/ L( {& tQ级:约可纠错25%的数据码字
7 ^' D a1 Y9 w" b8 h* m/ ~! L) [) v
. M( j/ A: |3 l- A" H# v8 M7 dH级:约可纠错30%的数据码字
% X' ~" K$ w/ F" A8 j2 Z8 o3 W' b+ J( A/ S; W/ r, T; b1 T
前提条件# x B5 L" q4 z1 H7 ^- Q! f
GD库
1 t/ e' M2 W t3 y0 `- ]& ~* D, V4 {8 E# e$ {5 c+ L
一、PHP生成QR CODE
& v* I; P7 P* R# U官网:http://phpqrcode.sourceforge.net/
0 i' c% Q5 W; ?& X3 x) D) C. N0 i2 f3 O3 [) n
下载源码:https://github.com/endroid/qr-code
7 o# o& n$ r& Y+ b K0 ?7 u6 B
5 T" D" x# _) d, A- X+ R目录结构3 U/ V( ^$ i# A, w+ l
$ q/ `$ W h( e, `$ w0 `$ s8 B/ x; `6 U" F
1、qrcode_create.php
( ~3 p3 z! E* Ups:生成普通二维码7 q8 C) q3 I6 l/ e
- & s% k C7 w0 x3 Y2 ` y' z
- include_once "./qrcode/phpqrcode.php";/**- x- H1 P0 r' s ~0 d4 [* b
- ; T& R: j, z( @0 j9 }: ~6 t" d4 P
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径1 Z4 M6 ~0 ^# r* j
- ; w! d3 v0 A( g! B. n' \
- * 在浏览器上直接生成一个二维码(内容为abc)
6 R5 q0 }* {" U" C- ~- z; r - 2 l: R/ l5 W4 t+ G6 O) u9 U" p; G% R
- */QRcode::png("abc");9 O! k" A2 [6 |) Q
- - V N7 ]& T$ k. @ j: q; u
- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**
( E3 _( f3 r4 x/ S - % a$ }* \: M- m' t
- * 生成文件到本地. o; e4 N+ {- V" I
1 b2 ^% W+ y- A1 h7 Q- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)8 i" }! J' x6 R
- 0 y: K8 F6 }3 }
- * PS:$saveandprint源码的p6参数做了修改
' n! L$ c5 C6 ^$ u, W' C- R" J - 1 I N' E+ `( c5 U6 I; L' O" A3 a
- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);
# ~0 C' ~2 r- W# c# u1 B$ B
4 t% m! q1 y0 _4 R$ G1 p
5 l, }9 f+ H% p# W- t, B" E
复制代码 . }% d+ r1 D, f5 j* h& o3 u$ m
2、qrcode_logo.php1 C6 k+ h) {# t* G. ^ C
ps:生成带Logo的二维码
. m& w( c& l! x: n; u) C$ |- /**% G% X J# e. E! Z) ?6 Q% `7 o5 g
5 h1 k1 D8 U6 W8 c" l0 M, @* h- * Created by PhpStorm.
. ]) V: f) G- I( o4 \0 t - 4 W6 ^& p3 z) r- D: F
- * User: user2 I4 h9 m: |8 @* p* Q/ D
: M! H' r7 ~' m. u- * Date: 2018/8/16% _$ g" z; B! m+ n
- ! \0 W" G( E' T
- * Time: 10:43* s/ m; Q4 V- L' i8 j6 V6 ^
0 H! J; b- O k' E* {- A7 i- */include "./qrcode/phpqrcode.php";$txt = "测试内容";. n, [, [4 b# N4 L; b6 `% z& z% O
- , ?( z/ \6 N9 C4 i% }
- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称, h& W* d" h1 @; p
x9 s, m3 Y1 c7 i' @6 x; Y- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是
8 m" H7 v) D. i8 n7 {
- I' }9 z7 K1 {8 u% ]- $margin = 2;//边距0 ~; W6 }; o. o( L
4 x& s) \" M( ~" O. H$ G. ]& ]% V- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片: Q- R- ~% X# r3 s" ~: T$ c; @' h
* e' e* F& U& z& [7 t- d- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){
' P: d' f% P# ^5 L! i
* f' A& [! g9 x8 g% X6 \! u- $QR = $picPathAndName; //已经生成的原始二维码图% M! r5 R8 I0 K* V' \; r |3 }
- , U6 @3 d2 P1 R
- $Logo = './pic/logo.png';
, L; `- @: |; ]. h3 L! c- v
u7 ^* x0 \* B( s3 ~0 Z- $Logo_re = './pic/test_logo.png'; 7 X# `: v' e4 h) v
4 Y5 R5 d+ }4 o4 P) n) k" L5 Y8 }6 ~- $QR = imagecreatefromstring(file_get_contents($QR)); + @* ]! V& G6 k3 J5 n
- 2 N+ E6 A- f0 C6 c' i" T
- $Logo = imagecreatefromstring(file_get_contents($Logo)); 9 L5 K0 ~2 \. d
- 6 \" m9 o! f! I4 j+ B
- $QR_width = imagesx($QR); //二维码图片宽度$ K# c) F9 m! J5 E' ]/ C0 t: ?
- * t1 f' ~3 n$ l3 L, Q0 P, }
- $QR_height = imagesy($QR); //二维码图片高度
@- L- M% G* y
! J/ i( t" i* A& f% L( G' S# q- $logo_width = imagesx($Logo); //logo图片宽度" S* b; o1 ~6 _. V+ _
5 G. {) s: A; l0 j- $logo_height = imagesy($Logo); //logo图片高度4 G+ z0 {. m: ` Q" n- J2 O
8 m, c- C/ m$ N, g- $logo_qr_width = $QR_width / 5;
2 M3 K2 t7 O8 d: l+ P
7 W E' @( J' r8 e6 W0 b( d- $scale = $logo_width / $logo_qr_width; ( E* w. [9 x5 ] m1 c
1 ?8 O1 v9 X& W7 f2 n9 \- $logo_qr_height = $logo_height / $scale; / D5 N1 z: g0 H6 d! i8 m! o
- ' Y8 G( `# i" u9 S0 P5 R
- $from_width = ($QR_width - $logo_qr_width) / 2;
7 A6 e2 d/ P5 {7 ?$ `8 E, I - 6 c9 x2 I- h: O8 A8 S& B- I
- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
0 g- {8 G+ D$ a( x$ G1 ]8 }# K - ( S& M3 l) Q! {: W' d
- //输出图片
1 Y9 D3 k& V4 E, L3 f8 P% S/ J5 R7 V0 M
( Y* T, D3 B. o* C. b- imagepng($QR, $Logo_re);
! n" e1 n0 }# [% Y# M% a/ { a& r
6 r/ l7 o( d8 {5 Z- F- }( {; L$ m- }$ A W) t$ f3 O9 [# Q A" s
; C w4 _+ b( F
) {& m# G5 I0 I" e R9 v' W" X
复制代码 3、qrcode_vcard.php (生成电子签名). W) z$ c C0 y9 J8 T$ l F! M
1 z$ t& ]" `. g+ ?' b$ X5 x0 qvCard格式:https://zh.wikipedia.org/wiki/VCard
0 l1 ]4 T& Q! L! l( U0 j, p4 d* F" X
$ H/ D0 F Z3 m, M$ C- * Created by PhpStorm.
- @ w$ {7 L6 P( U1 B5 K
4 \$ Z6 q) u" h8 D6 M- * User: user
. |% g: i) Z j! V0 s) J; M: o
% P5 p; ^+ ]0 C" R8 Z2 W! i9 y- * Date: 2018/8/153 R9 |" f z! \& \4 j9 m
1 C) n$ p1 i! Z* M/ Y9 h- * Time: 23:00
; D1 B U! h3 P. g5 u
! }4 U4 r7 d U- */require_once "./qrcode/phpqrcode.php";/**# P' M% i% r6 ], N( g9 N
- & P" |8 X5 J7 z+ B/ S
- * 生成电子签名' p1 ?: ^+ J9 a' Y% e( x) @; t1 g
- ; p* Z" i. G) a( n' c9 Y
- * PS;使用微信扫描二维码
: a1 p1 ]: C5 S' w7 r, M b6 [
8 Z I) V$ T- w3 {# ^- */$content = 'BEGIN:VCARD' . "\n";//起始标志% @- j; @8 ~9 V o
0 U& _$ }$ p! R6 O9 {( ?$ ]' q- $content .= 'VERSION:2.1' . "\n";//当前版本6 v0 A; }+ c% x' d
8 b" z* q8 K3 S+ J9 p5 \, g% ~& M$ ?- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名$ S k1 Z) E- ]4 R) `0 t( L
- D& W0 v% s8 A! P/ V. Z- `- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称
# q$ w9 e- Q# E- O" H" d( ]
" g5 m5 e b) s' _4 ]# G- $content .= 'TITLE:PHP研发程序员' . "\n";//职位
8 k+ \. m9 j5 \; B) w
3 Q# j: z: V9 G& E/ }- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话
+ L6 i" X$ G1 B' X4 ^$ y - % Q, i9 \: b5 e+ O. y/ |
- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址2 \1 {1 k1 e4 I' _) i B- X4 a% s: @
/ |) ?" u* F2 v& e7 C9 `! c- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)
9 M+ n# l' n$ o: D4 q! [! Z; o
5 Z: ?) s. m! {: y4 C+ u- U( i0 Q0 j- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话
8 l1 f9 S! g* @2 u8 g: f! L
) I, N0 u/ D& G3 P, K) l6 k- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱0 E3 F& k/ x* }
$ U0 u4 J3 Q, e; K: g5 W9 s- $content .= 'URL:www.baidu.com' . "\n";//个人主页0 q7 I a' d% {& X7 w# m$ x
- . [$ n1 P$ d, l9 `& i
- $content .= 'END:VCARD' . "\n";//结束标志1 R, r2 t, x- Q4 T" [
: ]1 S7 S9 @1 f* e, b8 z- QRcode::png($content);
" z& [* f" e, l& p- v - 9 }5 M& U6 d! F
- " P; j# ~, g6 U% M( ~; _" T
复制代码 4 }. } U" b. n+ _
相关文章推荐:% m- q7 z7 k! B( F. b* p+ m
1.PHP生成微信二维码实例
: Z |# q+ W2 ^4 q+ X2.php网址转换生成二维码
* o- c! l2 v5 q s4 e相关视频推荐:
$ J' j8 f' ^3 [ _# V! D1.独孤九贱(4)_PHP视频教程
: e7 X( O9 i* U二、JQUERY生成QR CODE
& |7 `6 P; A& c+ M2 A8 a! J9 T源码地址:https://github.com/jeromeetienne/jquery-qrcode' x$ n6 {" \( I+ k* y" L
+ |6 Q; Q2 x0 Ejquery_create.php1 m2 @. c& @- c+ f, T, h& U: ?
U" F. q' u4 ^0 _8 `2 R' Y0 H) C- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码 0 d0 U. d* r( e; F* y, y
三、PHP识别二维码
* @( d/ c. {# `+ e3 b9 w1、方法一
, K9 Y2 B2 V/ r环境需求,安装如下扩展
2 y- ?) \9 h; W2 Y9 p- ImageMagick
0 D' n8 ~5 q- L5 H/ f o; }- zbar
7 B8 n' _. `0 Y* J4 i* X3 h, p f- php-zbarcode' t" U- H2 y* ]
/ g% o1 a, }. l2 P+ \
2、方法二
/ y" [) g7 b8 Y( ?- i. ~7 p3 [PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以) Q* T) I7 [1 {+ J I( o5 O
qrReader类:https://github.com/baagee/php_QrReader
3 b) e& I! V& a) }5 F2 p7 O7 F/ Y6 a6 Z% {+ D; P
- + ?0 x6 {, c1 B4 y# _
- $qrcode = new QrReader('./test_logo.png'); //图片路径: {/ _) @6 B, t
~: i1 r* ]% Z) d% X2 x3 G/ N6 p- $text = $qrcode->text(); //返回识别后的文本2 R6 |& R) c& Y; M, l, j$ B
- ; @$ Q7 ?4 p- E
- echo $text;
3 y/ o! ]/ h/ ]6 c+ u
; z; m6 r4 O" m- # k V4 o7 p- U# z+ L0 A4 N
复制代码
6 k! Y3 i9 V/ t, I) ? t: c5 L1 S链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7
, ?1 U/ M/ L% |7 j1 W' G/ s$ G+ J
& O2 j6 F) h) Z
4 q% H' c3 \- H9 y2 }# z' o9 K z
; S0 }, q2 i; |2 _ Q5 e6 @6 B- N; x; K+ D+ r* ?5 w: I: g
2 f* p/ w4 O1 u' p- V' L$ b! V% ^' f) w' X6 U0 v
- p! D+ O- X+ Y7 Z' @
! |5 Z V5 M0 v5 ?7 U1 L- \5 n |
|