管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
! h" |" W; u0 `1 ?" |3 W- v7 J* f---------------------------------------------------------------------------------------------------
) w) w9 M2 g/ ~! h8 {7 H+ s: ~& W二维码的分类
7 V$ m$ R- ?% Z4 T' u2 Z* t( O线性堆叠式二维码
_, r! U2 j5 |7 j0 w- Z7 n: m# q: _. o4 h( i6 Z' t
矩阵式二维码; ~0 x1 Q$ z3 W Z9 ]
1 c) ^/ f: G' | c4 Z, P6 ]# Y* w二维码的优缺点
3 u; ~# O7 m- M优点0 z* w8 N3 p {- }9 z' W- \/ s% t, V( y
信息容量大4 x% K" s+ _+ @; x
$ F" d$ j* e" O3 Z; v! C
编码范围广( ]6 {6 D5 d- w- h# l. O: L
% v( @1 s. C" t: N' f容错能力强# ? o& g" \/ e# y) y
# t7 W1 \5 q" }* }1 X2 E译码可靠性高
" f* F1 z. D1 v P; B/ {' z7 {+ z4 I3 P; v; A
可引入加密措施# K: c! W a: R+ S( b
+ Z" O6 w$ H& X/ _成本低,易制作2 D& T* Z _+ w) n
4 k- z- J: x( n, y5 @ s2 u
缺点4 N9 Q, y' u' q1 K. x4 o
二维码技术成为手机病毒、钓鱼网站传播的新渠道
, f$ B( |8 G" R# C2 a
7 O) `! \: W! Z$ X9 R, w4 `信息泄密
" C* f! m/ M( @1 _) u1 ?# ~$ p3 X- o8 \$ n% m
目前流行的三大国际标准2 x: e& t* y- ], A5 @8 I' \
PDF417:不支持中文& ]# Y% ?6 h4 T. ~" l+ r
8 k1 L, t3 O. B0 `/ [
DM:专利未公开,需支付专利费用
3 Q6 d2 `9 k3 ~
: [2 k9 x0 W, I& VQR CODE:专利公开,支持中文. _! R/ c, _5 K# C8 J
% E: t& L8 o \
QR CODE 纠错能力
% F( d; K# P% d! A* DL级:约可纠错7%的数据码字
s6 W; X; i- u- ] h5 M# B; r6 k9 f: i
M级:约可纠错15%的数据码字+ k" {; r& _' H
Q/ M4 X3 L |9 J4 f
Q级:约可纠错25%的数据码字6 Y% w c! o9 G7 {+ [- N
5 ^) y4 p$ O+ Q+ qH级:约可纠错30%的数据码字
' T6 [8 ]( _- ?( p. Y/ Z7 ^# X% k8 [0 Q/ h- \2 Y
前提条件* K2 l2 ]5 ^3 ?8 l5 @
GD库) h( z, ]6 m: C7 z* j2 o9 ~. `
; f% ~! ~9 {' u9 z% ], x( D
一、PHP生成QR CODE
; S- N8 r9 r/ f9 I+ ?官网:http://phpqrcode.sourceforge.net/
, X2 m% q% H+ ?( @+ L! i8 I! S; `( Q3 B
下载源码:https://github.com/endroid/qr-code0 ^7 {, A1 x3 c! r8 j$ P3 T
9 \ n+ X9 Y, j6 z8 y
目录结构1 ^* g/ h% H6 h
6 E/ ]. I# M/ C+ ~* D- O3 v6 a* V3 v5 ]2 j
1、qrcode_create.php4 A3 k- r$ K4 y ?8 A5 H! v. \; W
ps:生成普通二维码
3 C+ \1 T( R' Q9 b) A- ( W& b( O9 E$ t' ?" I0 I+ J
- include_once "./qrcode/phpqrcode.php";/**0 }: ~/ H% {: r; @& `
3 p+ ]3 x5 J3 L' D3 w- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径
- a) T% I. z+ p7 h- x/ p& J( @
4 A0 @7 t# e1 }, q8 I& R1 P/ J- * 在浏览器上直接生成一个二维码(内容为abc)( w6 ~4 ?! v* {6 q/ ~& q6 R+ I
! l) }; Z- F& O& X* O* [- */QRcode::png("abc");* j: y$ U# T) k& S! L
- : r. }/ b5 i8 ~
- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**( B& f9 v2 }, z1 e. R4 Q4 |
- K2 J2 r7 H3 |) ]
- * 生成文件到本地
' b* R* L4 n7 r4 Z
& m4 Y" T8 t4 p* ?- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)) a' p D/ e' ]4 _" h& s; l Q( q- ]
- 0 H0 x) l; c5 `
- * PS:$saveandprint源码的p6参数做了修改: z1 v" D8 {, ?3 W, b7 q
- / ?' c% r U" U7 [
- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);
3 Q) ]* X) e8 [9 h
& S* d1 |, [. b8 M
7 q9 H T, [$ @( k
复制代码
( ^8 X- a9 |, m! Y2、qrcode_logo.php
& @ U" D/ k* Q. ]( A5 ? vps:生成带Logo的二维码- : q l' T1 {$ _/ T7 s
- /**. B! J. `4 C- s
- # b" F1 X2 ~' K! r5 F. i
- * Created by PhpStorm.! ^0 B# c! O5 `
/ X8 P9 E5 M) J# N& a8 b- * User: user
8 n) Q4 j! q; @
: I4 m# D- b& o m) V! k5 l- * Date: 2018/8/163 L2 b- _8 |% X7 Z7 v
- ; N; X! s% v; |& {; p. u7 U! n6 }7 H
- * Time: 10:43
+ S, y9 N3 x5 r2 i2 y5 U - 0 w8 u3 q+ ?: g; }) ?
- */include "./qrcode/phpqrcode.php";$txt = "测试内容";
1 N5 _" L# G( A: ?* s
' u1 ^; j, n) q; F/ T' ?, Z2 X- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称
- w& |6 i9 h+ Q* c: o1 A4 n; ^0 ` - # E3 g, T% Z- S0 W( i' b. N6 v
- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是# E# L" H- D& ?5 T- z' |
4 }6 @& a ` j1 _$ B8 k! b- $margin = 2;//边距
+ b$ h6 t3 ]5 {2 j" ^
- j# y0 }2 Z9 c- z1 v# F5 F- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片
/ {3 ~& t2 B5 r' K/ Z/ P% x - ! n4 ]$ C0 D" |8 i0 w+ J: y; r
- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){ 1 e6 J, i+ t' \+ K7 O+ d! J, H
- " c- Q( L+ e* J& V
- $QR = $picPathAndName; //已经生成的原始二维码图/ S$ W1 X0 a- U+ M( I) W9 I" T0 Q. I
- # ]- `. u. @ Q; H
- $Logo = './pic/logo.png'; 2 A! r# S& t6 Z) N9 Z) M$ U
- 1 s h K* W) h5 k$ c7 w( o
- $Logo_re = './pic/test_logo.png';
9 ?4 a6 Q u0 k U$ Y) z0 v - ( c& i) T; Q8 s/ M% q2 R
- $QR = imagecreatefromstring(file_get_contents($QR)); * M4 J( r1 }. z
; o n1 A. m/ Z( H1 X- $Logo = imagecreatefromstring(file_get_contents($Logo));
, d: [5 x) ]0 n: C% L f7 z2 o
1 r6 `7 U* I6 a. v- $QR_width = imagesx($QR); //二维码图片宽度, h9 C: {8 D' L* {& q7 ~
- 5 c& L6 `3 C0 g9 n. O' B
- $QR_height = imagesy($QR); //二维码图片高度& I j/ l9 h ?# ~0 ]9 D' l. Z: m
- ( w! V9 M0 Q' a$ D7 s/ y
- $logo_width = imagesx($Logo); //logo图片宽度
{! B7 f, }8 i. t+ C! @' X - * ?* l4 m* A$ v$ q! J; W+ G4 R
- $logo_height = imagesy($Logo); //logo图片高度
( N7 i: U; w7 z2 r3 k - l, [; T: m5 w Y, _) H7 O
- $logo_qr_width = $QR_width / 5;
6 v( X5 _! A" a* N: a/ A
5 Z" _1 B( E8 ~& [9 d% F7 r& M, `+ d/ w- $scale = $logo_width / $logo_qr_width;
( o1 j, P, }, H1 i( F
$ o" ~+ Q& Y# I6 \- $logo_qr_height = $logo_height / $scale; % @3 d: e$ L! i& @' l
- ; U* d: _: j/ r' W7 } d: ^
- $from_width = ($QR_width - $logo_qr_width) / 2;
' `" h# U) y2 c9 S$ ] - ( l8 }; s1 x1 J" N5 E8 c
- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
% j5 j, A6 T) U9 n
3 Y( H5 f$ @+ Q3 b. I, V- //输出图片( U: T9 C2 w# x3 m
0 V) A$ |# b( @ {4 ]" K& _7 ` c- imagepng($QR, $Logo_re);7 G$ r2 ]2 h" p+ Q. }/ W& y
/ N# V8 |& n1 W+ T% V- }. _; K" W; R: W9 V! U
- 2 r' b9 ]4 ~. j) o
# H; N' D. d) R* o* V
复制代码 3、qrcode_vcard.php (生成电子签名)( `+ c/ C- \1 X/ A& J( j! T. ^4 q
- | o! h$ F! R0 O5 C( \; avCard格式:https://zh.wikipedia.org/wiki/VCard
# F5 ]- }# j6 `9 ]6 z. }+ `" {! E5 o6 t
$ C S" ]4 k, [. R- , {# _8 J. i2 S
- * Created by PhpStorm.
5 i- q: y4 T K m6 H+ {+ c, I
0 F2 Z* |1 l' K* S0 q- * User: user
/ P& {. [% U5 B" t% v R - 9 P; q- j* J% z: \" q" z; J
- * Date: 2018/8/15
7 m- e2 g& H0 c3 Q' s& _0 c
. z% Z8 s1 @3 t$ Y- * Time: 23:00
# r V! v" @' [( _: p# e# K- g. f
4 \5 Q% y R5 U1 I. X- O3 D9 ^- */require_once "./qrcode/phpqrcode.php";/**
: F' n8 n; N, p6 D
S' Y' `( B: P1 ^& V6 D y- * 生成电子签名- G3 Y8 X$ `: p8 g: M3 X
( \) r* ? ~3 k$ B% N! a- * PS;使用微信扫描二维码
; J9 O! E! W" d( X1 j9 M - ) M: M; c. B( M/ X3 u, q. P
- */$content = 'BEGIN:VCARD' . "\n";//起始标志
$ L9 C3 z, @, o3 w
/ p( F9 g2 w m2 X2 B9 ^- $content .= 'VERSION:2.1' . "\n";//当前版本! z2 y0 [$ }& z2 K
- 9 f9 V0 g+ ~& {' ?/ Z
- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名* Z1 X- z6 |' _$ S h5 h
- , |! y9 N) C7 |6 l O7 M6 S
- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称3 X$ ?$ L! W8 w# L0 g: i
- 1 x3 z8 B8 h8 }9 k. }) O" O
- $content .= 'TITLE:PHP研发程序员' . "\n";//职位9 q/ I5 g2 t) x$ ~
4 Z& x2 i0 l S( |- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话3 }+ `, _" Y: j2 ~. C% ]6 ?
- ! f8 h! K5 Z5 T m0 I
- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址. _; e. _3 j; b* ?. L
- 1 U7 e- [/ c5 w. O5 B! M
- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)
0 e+ x8 ~" L. L7 X) P% N) K# C
1 p# c% B6 M' F/ S" \# y; h- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话
# r" ~- m$ {( e7 b( z+ ^* G - 3 u9 }/ [+ d6 F8 N
- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱
Z, d8 Y1 U3 p) q$ x# L" m2 a4 U
% j6 u ]0 ?8 {6 G& W u- $content .= 'URL:www.baidu.com' . "\n";//个人主页
3 m2 ~2 Y l/ B
% S# C( g! L9 a$ l9 u- $content .= 'END:VCARD' . "\n";//结束标志
. W. ^! Q; I6 k4 a# z
3 k& L* p6 _- D- QRcode::png($content);7 h- T M% B5 [
2 K7 h0 T$ S1 s* l% T
9 n! W0 F0 f3 Q4 B2 ]$ o7 t
复制代码 , z2 _, d- E& R
相关文章推荐:
" b" Q6 ~; b7 l8 n9 {7 t0 o% c/ y1.PHP生成微信二维码实例
6 ?7 l& o$ s/ r; h2.php网址转换生成二维码9 [6 m- S3 j+ U: C
相关视频推荐:5 J* c8 G# ]& P) B/ Q' ?6 V7 \2 I
1.独孤九贱(4)_PHP视频教程
& f# s7 _, V5 l. b) e8 K二、JQUERY生成QR CODE
! D, H1 f" }1 {9 W源码地址:https://github.com/jeromeetienne/jquery-qrcode! q/ x( d' M% Q( }
U; k! D4 _8 X: s5 F5 ~8 R! g3 |
jquery_create.php
1 H0 `* L* Y) C: D
# V7 h) l$ [' K. @- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码
# q' E! d! D8 D* N$ N4 R& |三、PHP识别二维码
: e) L7 A! L$ r, i/ a% x0 L+ A1、方法一: T* \7 E1 {+ q; ]0 |6 g: t. M
环境需求,安装如下扩展" b6 ~3 c, A% T- R! U# m' }
- ImageMagick
& p2 ~9 o$ s7 X: N- zbar
5 ]' a/ ?* _+ `- f- php-zbarcode: Q, G0 V9 g4 A
" e. V3 T J; W- q8 }: l
2、方法二
1 K# W" H7 ~! E9 F4 [9 PPHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以
! y( K! K {* B+ lqrReader类:https://github.com/baagee/php_QrReader, f- r; n1 u$ S/ V
7 l4 h0 K. b, _* ?! S* B/ Q. ?
- 9 {! A; v/ i& l0 O
- $qrcode = new QrReader('./test_logo.png'); //图片路径
$ B) r5 X& c. H3 a0 F( E" H( L1 d - . L$ u2 _6 i+ _
- $text = $qrcode->text(); //返回识别后的文本
" X9 |8 v8 A b2 l' B
9 E" H+ z( s/ c5 C5 T$ C- O- echo $text;' V. R O( o* m0 O5 f1 Y' x& \
- 2 Q5 o" |% b0 ^8 X0 {* G: k
- |, M; t/ ^8 |0 V: t/ V# C4 P
复制代码 % {; O1 N2 b' J3 B1 s& s
链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y76 W- |* @- R+ W1 S/ }
$ e6 B) N9 \9 S, b* W& _ e+ s
1 j3 ?2 l2 p! S3 u" u1 R$ w* T, p2 |3 d1 o1 n7 T; ]
3 z4 s g8 f1 p( [& a; Q' n4 z+ a! n1 V
: I& n4 O* c9 N9 D' P
9 L) ]) b) }" e$ V5 j! U+ \' \4 _/ v/ N e" b' u# R/ I
f$ e, `) n. }8 g9 W# l( a
|
|