管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
8 n* |2 R( W3 ]& m1 E& x9 z---------------------------------------------------------------------------------------------------
. Q) v' W% f: H! j0 U8 B- ]二维码的分类
5 D* F0 O& w, v) Y线性堆叠式二维码
/ G c, R3 v; h* I! e; d# J! F" M
) h" k4 `/ n) l# B4 s矩阵式二维码
3 t; F) y2 C/ Z( Z. O5 k! @; g% D7 h0 P
二维码的优缺点
0 E$ V" h' _; ]: @1 S4 t, d, U优点4 G2 y- f, T) R
信息容量大0 b, m3 I- @ Q1 X
% g7 q2 V0 ~4 H% G7 A; {' k
编码范围广$ J0 |. }+ X: ^8 e6 A/ A8 l9 k
- e8 q: @. ^4 e' Y; o
容错能力强
n9 h* B. R9 M+ D' ]8 I; \ h Z
, m2 j/ `: |" S译码可靠性高# y5 Z N: {, M$ ]
6 I& }, G7 B* ^% {+ B% E' K% P可引入加密措施8 c- Q4 U0 J3 c! p) X. J
4 X) F3 a- C# b0 y
成本低,易制作
& N* j: L; j7 f+ S' ]" @: J8 F! t0 M$ r6 w. p& [
缺点
$ N& G; a% c: N- X二维码技术成为手机病毒、钓鱼网站传播的新渠道
1 J, G4 Z; O% o/ D; z9 X
' @9 c6 L1 L# g5 F% h% A# \信息泄密
# r0 D" t$ c& l) C$ S" F4 `2 `2 v- c+ F' t( E3 ]) ~
目前流行的三大国际标准
# E; r" u9 `' Y2 ?/ CPDF417:不支持中文
" R& F: T' J- u- N1 {. ]3 D2 `- \% c2 v! l' }; c2 C4 R
DM:专利未公开,需支付专利费用
* S/ R U4 o/ s
& d) {# O) |5 @* g* M+ K, K& ^* dQR CODE:专利公开,支持中文8 ~1 z- M+ m$ X0 ~
! e5 F, L n+ s F8 _1 ~
QR CODE 纠错能力, T2 _* [. v' O5 [9 x& i4 a( k
L级:约可纠错7%的数据码字+ [% Q+ D# T( p
. G* c. \$ O2 `) l6 f. rM级:约可纠错15%的数据码字
9 n8 L& s6 Y1 B3 g! c$ e6 A4 f4 m; D$ r( o
Q级:约可纠错25%的数据码字' ^0 [- ~# m0 u7 r! l r# H+ E9 y8 @
6 t8 u) P7 k w
H级:约可纠错30%的数据码字
! J' Y- {8 I; t( R- K/ M. x% a- P% ~; `; w6 ]; ~
前提条件
; a, w6 t& z) n( c) SGD库# v, s& s ]2 {& |; g
7 H1 y6 |& E* n2 `. _9 b/ G一、PHP生成QR CODE
% F. G# {5 v4 s3 o `官网:http://phpqrcode.sourceforge.net/
. {5 A% d5 v. j, X& J4 g
7 i% ] T& A# }: m下载源码:https://github.com/endroid/qr-code6 y9 E- a. i7 g7 s2 Q' v) J. L/ y
4 h7 a2 ^8 S2 a: i' w. [/ b
目录结构+ u( t3 I; T) d: X6 T2 _& O8 h
2 I& g" C) y# R: z& M2 h2 a! ?/ K Q
1、qrcode_create.php9 ~, d; u: }* K' Q. K# l/ l
ps:生成普通二维码. y& ? {7 _8 B4 ^; `- i
- a- o X( V0 B4 N- include_once "./qrcode/phpqrcode.php";/**0 G9 |+ K) Y! S0 Y
+ |, M, f6 w# N- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径
' z W5 f- E w6 g4 n/ ? - / q+ x9 | `9 |! E% z, m
- * 在浏览器上直接生成一个二维码(内容为abc)
% m' w* n4 ~8 W% x9 K
) e) o* A6 J# d5 m( t! r& h: g1 o- */QRcode::png("abc"); `8 z/ a2 ~% a% i/ [! i, k' v0 K5 X
- ?4 F$ \' @' p/ G! M- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**# c" A/ A+ F5 E/ I3 j
2 h; k* G4 E) x+ `9 K- * 生成文件到本地
. d6 x6 v N9 q% Y9 k
# J# G# x ~# f# ]- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)4 c* @+ h) a B& p, R; D
- 6 R* a9 b( B6 k9 o
- * PS:$saveandprint源码的p6参数做了修改
& G- U. ?7 n* J, v: l- ]: K
( r& G$ D6 u% T5 t4 C3 b- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);
W8 ^2 Q, z" P3 j
* B: c2 a( Q! g1 L. ]6 W- 6 \' |- X: f! B& s7 d
复制代码 4 D1 \' E8 j$ k% o, g
2、qrcode_logo.php
/ ]& i; U" E9 Ops:生成带Logo的二维码- 0 x6 w) L+ B. ^' ^+ u
- /**8 e1 J' S6 ~$ H/ s+ h$ j
: A( b. h5 Q' e, w0 T: q% K- * Created by PhpStorm.4 h0 v9 v+ }+ `6 t: l. v( o
- # z1 S8 M9 x3 c8 a3 ?6 k% E, R8 x* Z
- * User: user
/ S; ~, \1 X) V4 y - $ Z9 n9 A+ A8 q2 t% Z9 g! u B! O
- * Date: 2018/8/16
+ H3 ^3 Y9 I# A$ S/ S! f' T
* ?) P" M5 x* V- U- * Time: 10:43
! {" ^2 A* I& \
- d. f- r5 \! T; p- */include "./qrcode/phpqrcode.php";$txt = "测试内容";+ U% s" \+ M/ [/ ^
- 0 {4 p; s6 a' \* C2 y& \/ z1 d
- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称
3 F: p& ?3 A5 l/ L - : q0 {' {! j" y: K4 K) u2 H
- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是9 I/ K, x, Y2 x6 E
' P' h: _* N6 k4 k4 s- $margin = 2;//边距+ ~7 h, z+ U. Q% }, _" h
- 5 r2 N! f5 X- A3 g9 n5 c h8 d5 y: J
- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片8 Q$ o o# m" ^$ f: ?8 f5 v
: O% e6 d( W. ?* Z0 x$ b" N! m- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){
0 e" U9 M# n! U7 T, _( d
8 Q* |! h2 ~0 Y- $QR = $picPathAndName; //已经生成的原始二维码图! Q. a6 [% K# m Y
7 A5 D6 P: j, O8 i r0 ]0 |+ V- $Logo = './pic/logo.png';
4 x0 q1 N: F+ O! g7 p! [- o
/ X8 w2 O+ |: ]- $Logo_re = './pic/test_logo.png'; 5 F% D2 P* F# s' x) E
- 7 y) _( H9 S" P# F5 h
- $QR = imagecreatefromstring(file_get_contents($QR)); 0 o: V/ ^- M8 P8 Q
+ w) E! `0 e! ?7 m9 ?- $Logo = imagecreatefromstring(file_get_contents($Logo)); / l7 g" x% N2 B7 B: `
7 K1 l# S: \* u L( ]- $QR_width = imagesx($QR); //二维码图片宽度
* G: O; C( y: K& u, v, s6 G
" ^ R5 d! K" d1 ^- R( I2 H4 b- $QR_height = imagesy($QR); //二维码图片高度7 G7 U- }) p4 [' }3 s
- 7 Q: c7 F" y; X6 `# n+ ^' i' i" m
- $logo_width = imagesx($Logo); //logo图片宽度
% D- E |* q8 a0 }6 r. Z$ N - 5 K6 Q( a Z" y4 p" T
- $logo_height = imagesy($Logo); //logo图片高度
( w- u) b( h- r& w7 U! { O/ k - 1 z' @- P/ U9 v6 ?" m n% G3 }6 P
- $logo_qr_width = $QR_width / 5; ) R! S# x& \5 ?
- 7 G9 ^! p* C0 h' t
- $scale = $logo_width / $logo_qr_width;
" X; k+ k0 k9 |) X9 A - 4 g; r' ]0 g% o2 [& T. q
- $logo_qr_height = $logo_height / $scale;
; }. j& t, y, A0 X# ^6 u) N# G
& ^1 z* z! Z2 s/ D4 y0 L/ k- $from_width = ($QR_width - $logo_qr_width) / 2;
- K# G; p/ s! W1 R% u |% u - # @" o- f5 S" f" ]5 v/ E( ]8 {/ I( e
- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
, h. v" x: ?! d1 W3 p3 X0 B - ( x7 o D* N, w
- //输出图片
; x4 f9 N7 ?+ z7 g5 B: w
7 I v& L% D' `* w8 v. I$ N- imagepng($QR, $Logo_re);
# o( ?% V, p* s. Y4 t
6 J3 n( s5 K/ A3 R# _- }% A0 Z" x$ u8 d* b5 L
( H0 }% I' U2 _5 A$ y! {
, z: \ O5 d' C& W9 X6 X
复制代码 3、qrcode_vcard.php (生成电子签名)% ]* k- w+ O5 p0 E
& E& C. K, x% d# V- y: t
vCard格式:https://zh.wikipedia.org/wiki/VCard1 |- C8 l' T/ ?" H2 F/ q& @
& }$ ~3 {5 \- E+ K, }4 p: s
' Y5 Y! _- g8 k. y) W" a- * Created by PhpStorm.
( {1 b8 \: O% I% n" y7 Q" ^& D \9 c - / \& A: M! u0 ]/ z* T( @- D" d
- * User: user
* @! {9 c* F" O% P) t5 o. u - / l0 K! `+ I) H& Y6 g% _% N2 r
- * Date: 2018/8/15
8 u* `. b2 v8 B, t2 K9 ~3 I
# j# T J* F9 ]. V4 }7 \4 T- q- * Time: 23:009 [+ m" ?3 o! F# T+ Y9 x
- o2 X0 m. X' Q9 {& w' X
- */require_once "./qrcode/phpqrcode.php";/**
g% ?2 I5 C; \( ]
4 `- X- e% h, T- * 生成电子签名
, S0 T& r* `$ ^- s8 H5 A- J - * Z$ V% g- ^! M6 F8 n
- * PS;使用微信扫描二维码
) h% l+ O+ q; d6 ?) M
0 B) O" P5 C( T! E- */$content = 'BEGIN:VCARD' . "\n";//起始标志, U+ |/ d0 T# h: w* h" n
- , p2 F$ h$ s" \; L S5 B- u
- $content .= 'VERSION:2.1' . "\n";//当前版本
' F+ Q! P6 m- Y
3 B2 |. q& H: e: r) n9 t- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名
% H4 l& k, ^! j& }) M - & M" U$ K4 v5 k! v8 K- |
- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称! W2 G) K2 w$ q$ e' Q3 q
- ) x" V5 T f9 p2 b! F+ M( {0 S
- $content .= 'TITLE:PHP研发程序员' . "\n";//职位
1 w$ X: m; L- Z! U8 E* |
9 \9 r: n- |( m1 B* A* A+ R- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话
5 X, B8 Q) ? J/ h
* b. \. n7 {) y- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址
# W" A$ R3 I' A* Z2 z1 z - ) f- m# l( f- u! v; b
- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)! _, C* d0 l5 u, ~
+ `) y5 a0 ~5 v$ H- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话
- r7 w7 r2 g( t' D- }% Y$ u - ' O1 z( t4 ?4 p, S5 u; i- B
- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱
8 |" v: T' |6 s1 C U
) E8 f$ @) T, D: ]: n( ` |/ a* G9 O- $content .= 'URL:www.baidu.com' . "\n";//个人主页
* v% H0 \& } J! N# U% F
) @" s: `' E( d9 | c# Q# f% [- $content .= 'END:VCARD' . "\n";//结束标志
( q! r1 O" G" B6 Y% w0 y5 F0 a - 1 x! ?9 Q) I1 w6 v+ o* T! P/ e
- QRcode::png($content);! H9 T; U0 i( G3 j) F; G
- 9 { ]- k7 W/ Y1 W2 c( N
4 V! L! y9 J4 c" i. v
复制代码 & A, H, x; v; e; w' w" n3 _. c
相关文章推荐:/ T) ?% J3 I1 c6 f$ R
1.PHP生成微信二维码实例* D- M% |6 J( v
2.php网址转换生成二维码" o* G& u7 n n# U
相关视频推荐:
1 P& \( ^% N `- ^1 {1 }! ~' _1.独孤九贱(4)_PHP视频教程 K# V. _ F9 p1 v- [
二、JQUERY生成QR CODE$ s( I( w+ L- m- H: b
源码地址:https://github.com/jeromeetienne/jquery-qrcode4 h6 |5 c6 m" y! m( x0 e
+ r- n a8 C9 b( gjquery_create.php, f1 Z+ E: j" h0 t& N
! E. t% q- K7 S1 C" U- [* q# ]- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码
- m) T6 f) D9 C6 }3 {1 X ?三、PHP识别二维码0 I% n& G. ]! h- ~: O
1、方法一
4 h! n4 u0 ^. T8 m; T3 V环境需求,安装如下扩展 T' L7 u3 E; p' v) [, `
- ImageMagick
8 l8 a& C, g( Q" h/ t$ c* a; \2 }- zbar
& [% s; E# |9 h% N3 @- php-zbarcode0 C7 V6 F U; P! e4 I
5 p( W- K7 s8 I/ J& p
2、方法二* j" x- v4 F( ]$ h' j' Q
PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以# U8 `2 o2 \6 s
qrReader类:https://github.com/baagee/php_QrReader
0 _ S9 v* f p5 f; Z! E! }9 J; E+ h6 J! R! A u
% ^- |+ \, p+ i" _, L/ n2 \' c( h- $qrcode = new QrReader('./test_logo.png'); //图片路径$ W4 E; q5 z; W: j$ H
- / g1 ]- d9 |2 K$ \
- $text = $qrcode->text(); //返回识别后的文本
8 a! ]. }+ l7 Q9 r% b+ }
/ w( L* m' a$ V- echo $text;( x7 p; X$ G9 i1 e: ~; U% g
* G- w Z G7 P0 g- g, ?; C! W- 4 q1 s) Y6 f5 L7 n% s
复制代码 " K @6 a7 G. m% i
链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7
3 ?1 y4 I5 i6 T$ S: j* K V3 e1 h
& Y( Q2 O. e4 P% ^5 f. R; i" P5 m* K3 _+ `9 S
0 N& u. D3 k) C8 x7 ?+ ?/ e
' o/ ^6 L; Z# b6 ? R! P! o6 q1 U# Z7 F
6 p: U& { F" c' X2 X" A/ H& n3 w3 Y, n+ j
- k5 b [. ?/ {4 _3 F8 H, n* q* l! o3 e- ?
|
|