管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
" U9 m( Y3 |" P---------------------------------------------------------------------------------------------------
" O7 U' D b6 m/ a) n二维码的分类7 [6 s' A8 j4 d9 V, ?
线性堆叠式二维码
1 x, i' x( e/ b
; y! p$ M: Q2 X矩阵式二维码
, }8 D' \1 k. c
% P# d! d" \5 o" K3 G二维码的优缺点
- z( c, d! ^9 g' y& @; k' O5 b7 P优点
1 n! w( U5 D' }% l4 t6 i信息容量大
* e5 r3 f/ z) ^+ X; W; N
6 T8 ?: o# ]& K3 o# X& ]1 e( {. M编码范围广8 r& I' t' _0 d; p9 n
/ r, L( g- I. ~$ X. f8 t8 m5 M- m
容错能力强
$ r8 g$ b6 B. X2 J* N9 `0 J ]1 t+ `5 L0 i
译码可靠性高+ G+ B, z. R" J4 J- Q
- n: @' t* |$ y* T4 ?7 I! e
可引入加密措施
9 E& L5 v. C$ |% [- l2 g2 J4 f2 y: n* T9 J5 z! b7 E
成本低,易制作
& D2 q: q0 r9 C8 O* P" y
6 Q# {$ o) h8 j" i' c' D- ?缺点3 j/ B& R& V# j, o' Q# L4 [
二维码技术成为手机病毒、钓鱼网站传播的新渠道4 w& a. e5 [: b8 e3 X$ O' T
1 D$ K1 C" q L R0 U1 ~- p信息泄密
) Y3 ?+ x6 f1 N9 T# c% A0 o6 w4 E" e
0 m- c# X/ Z3 B4 X+ U2 r目前流行的三大国际标准
" u! g! ?6 M4 t. w5 ^, @PDF417:不支持中文
9 p6 o) ~, g7 [% j) w0 A
6 Y; ` V$ W7 Y$ z" q! ?+ ]DM:专利未公开,需支付专利费用' `6 Z$ ]( J9 W3 {
- O% V1 c+ a; m: r, W
QR CODE:专利公开,支持中文
& H6 K; B# s3 O: _- d2 q
- E# l4 A5 l5 Q- J' o1 U3 F5 jQR CODE 纠错能力& w& p6 Z4 o3 t0 I8 B4 l2 `
L级:约可纠错7%的数据码字
' C7 h8 E j) |# C; o
$ K7 b2 z2 [8 v: ~1 V+ sM级:约可纠错15%的数据码字4 W7 y; y+ ^: r% l% T" R+ K
0 \- I# ~: w' R; K- A7 S2 f6 f. VQ级:约可纠错25%的数据码字
& U3 M6 w1 X( C7 A) N% c* _
7 [5 ^* ]$ q6 [H级:约可纠错30%的数据码字7 Q8 {0 V* O, ~. ^( P6 D) M
6 r7 y S3 T( l, n% v- H前提条件
: B& U9 j9 {* t+ Z4 |) bGD库
. D/ {1 L% a8 s1 c+ o Y: g3 y3 _- D; w: R% k4 S k4 r
一、PHP生成QR CODE
2 p3 C# ?- n/ S |官网:http://phpqrcode.sourceforge.net/- G4 X5 h: l$ ^2 U3 i
2 I/ j3 `$ z$ ^下载源码:https://github.com/endroid/qr-code9 }( n3 }% q2 c' l8 A3 R- t
' v% D) M! `) N4 r* w& x, n
目录结构% p6 w' R2 F4 I: L' D+ ~6 n
( o% i' R( G" {8 d5 g$ m0 U
* z, G4 v1 i* M+ X @
1、qrcode_create.php. N6 L/ {" v3 F+ P5 q1 ~
ps:生成普通二维码& ?3 p4 ], _6 N7 I7 n1 K# U
" @8 d" y: ~6 @- include_once "./qrcode/phpqrcode.php";/**
" Y7 p) u y0 {6 z
5 h+ { K) V0 U* F. s- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径& s3 e) ^1 C' P% \2 z4 q& P
2 K" p- k5 m# \ }( w8 ^- * 在浏览器上直接生成一个二维码(内容为abc)
2 X0 o5 N0 g D5 B% @1 C" ~
5 K/ X8 t9 X- O1 o! d% ~9 r, @- */QRcode::png("abc"); N2 r$ C7 q, U+ P
- / E, {( n, C% E
- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**3 [3 `; B. X+ A1 \" \
# Q* S- ], p! ^0 f- * 生成文件到本地$ H$ ~9 Z) P. j$ a0 V
- $ T3 H6 p- ]3 X+ ]: `) K
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印); t# m& w& ^: e+ B( J, v% r
% P) r- u9 G. O( b* n- * PS:$saveandprint源码的p6参数做了修改* m# d- E" D- Y0 u
: W$ a9 O+ l8 Y6 @( B% Y- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);
1 D6 M: q5 S# [, M6 A a
3 K, Q0 A( o7 _. d- 9 r2 ?7 z3 j/ h) d, E
复制代码 - P: _* E% Z) R6 [$ f# b8 E( M
2、qrcode_logo.php
, F6 p& ~9 l: z$ c! |ps:生成带Logo的二维码- . V5 [4 X* m" k% P. S$ N! z
- /**
% X) z" q+ }1 U9 @% u% B
1 N4 }9 K/ H3 K1 v4 d' f+ Z6 l- * Created by PhpStorm.9 {+ e, i5 N6 H0 q
2 B5 `# t% w: s' h. r- * User: user
4 K6 q1 @' _; \3 S
& P4 @* }1 C% G- * Date: 2018/8/16
4 k0 Q9 X, v: x
6 q. _. W: |. ~- * Time: 10:43
) M$ @' \0 y) P+ { - / d, e0 u# P& x7 a: B/ l( b
- */include "./qrcode/phpqrcode.php";$txt = "测试内容";
3 J1 @/ \% e+ e* E. a) ?9 N. e% l - ( A6 C: L W" K0 M+ J- ?+ `4 j: K
- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称
5 a' A8 V6 M( a5 m# k
+ e/ v' Q' T/ I' D7 m3 I) f7 u/ G- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是1 ^6 s. R# z2 P& g$ k$ F. e0 i3 L
- ' e$ R* s& A5 j- x& f
- $margin = 2;//边距* n0 h# W; `2 N; n2 U
- * K. E: z# m, O% f! W# ]9 V5 G
- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片- x. |2 P% e7 l+ f. I" e# D
- ' j) f1 `/ E: Y+ ]
- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){
) `, M' k. G+ R4 V; E3 `% D - ) `9 |* j, w* x3 o2 y& ~- W( v
- $QR = $picPathAndName; //已经生成的原始二维码图0 s7 @' C D4 p( r( Y3 F5 o. E% G& B
0 `; w; X9 d' B9 u9 f7 z% J7 |( Q- $Logo = './pic/logo.png'; : I9 O6 u1 ~0 n6 d6 `1 Y/ s4 ]1 b
$ e% D' o" S% g, T6 a/ y- $Logo_re = './pic/test_logo.png'; $ \) t0 Y7 i2 f7 G( k7 R: g' }5 M
/ t; M( O& P2 D8 h& x/ ]- $QR = imagecreatefromstring(file_get_contents($QR));
9 Q, G# Q9 D$ W$ m% ^ D+ z - 8 I7 G9 s, r" v! ~- t' E# a
- $Logo = imagecreatefromstring(file_get_contents($Logo)); , g% t+ f* U: x: n* @3 z3 d8 m
; ^3 f" [+ [/ t( ]9 s; u: F- C) R- $QR_width = imagesx($QR); //二维码图片宽度( M4 u9 l1 C6 p L9 \6 V
3 ^ P* ~3 Q: c+ Q- $QR_height = imagesy($QR); //二维码图片高度
' s0 W+ \, K" ? - 0 H* h4 Q4 y2 w1 u; s
- $logo_width = imagesx($Logo); //logo图片宽度
4 O! b1 g$ m/ u; Y* K8 W% H! ^& W - : C/ L$ d1 K+ _6 O/ b' ~# \
- $logo_height = imagesy($Logo); //logo图片高度
% L, X' F5 V( N3 O* Z* Y: Y - 7 E r0 Y' U/ d
- $logo_qr_width = $QR_width / 5;
! ]1 ]% V1 @. g& G* a6 n
2 H6 V; J4 l. E1 q/ }9 {7 u9 i/ ~1 T- $scale = $logo_width / $logo_qr_width;
! B9 _3 @. e8 i3 a: v# N
) a% w2 P$ F! f d- $logo_qr_height = $logo_height / $scale; & u+ \$ I2 y/ H" g
- / v; L( a0 z, \ @+ K2 ]% g' g) [
- $from_width = ($QR_width - $logo_qr_width) / 2;
G) S& `% E1 S! S - 8 t2 Q1 L E4 x
- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height); # T, H9 j, s' h5 r0 Z! z
- 5 \8 f3 c7 t* Q4 v4 y8 f8 S
- //输出图片
& L3 d+ L' J5 Q. Q - ! u* I. Q' D8 T+ X
- imagepng($QR, $Logo_re); h5 P- ?5 ~0 D9 l7 ~! j T
& u* h1 r8 ^- O& O, q- }. o4 A4 `4 l% j x
. i- }2 x6 G$ {- / }! @# s& e2 g2 K/ F8 ^$ X' @
复制代码 3、qrcode_vcard.php (生成电子签名)! ?+ h2 L0 x# E( a
" ?5 V5 I2 N) D& K) ~
vCard格式:https://zh.wikipedia.org/wiki/VCard
; w; S/ s& @' Q, `* j( f$ Z# U. K5 M. e0 v |
9 X! M3 ?+ Y/ x+ t( s# h$ G: l: \- * Created by PhpStorm.; U* |) [, K0 Q
0 M( P# G5 k) u4 c6 s- * User: user
5 y# {2 N+ G0 D1 _% h6 W& y - : R4 J2 s$ F( o; _/ {+ s4 q
- * Date: 2018/8/15
5 M# M8 u& | S - + L6 A2 P6 D: m, t
- * Time: 23:00: _! ?, \8 _. o3 X: Y, k1 ^0 Q
- 6 [: K5 V; f3 a& J- ~
- */require_once "./qrcode/phpqrcode.php";/**' O0 p2 Q, b% x7 X
- " d0 J3 l3 S! ~% g9 L$ f! |/ s0 [# V4 L
- * 生成电子签名
f9 A, X; { N! W& T+ i3 t
; R+ x; o6 b) D9 i6 N2 G- * PS;使用微信扫描二维码 A9 }# o1 s8 v& f
- }- j" ?( L$ h& t" w7 r( W! Y- D
- */$content = 'BEGIN:VCARD' . "\n";//起始标志
) @$ G" ~5 y+ v! X) I. s
9 C M- I8 v# n+ q& q" O9 a- $content .= 'VERSION:2.1' . "\n";//当前版本
- {4 k* K3 m9 F. P b
- _+ N* J$ O' A' M& N( [# b$ z' r- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名
# j/ Y2 v1 w3 `$ M) [+ i) P5 O - 8 i2 Z+ b$ K7 g) D5 a$ ~
- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称% [: y/ f+ S. |0 |8 j0 y: K3 w; E
. X+ T; k# W7 ~- $content .= 'TITLE:PHP研发程序员' . "\n";//职位- g5 C3 N5 v$ H- C
- ! k% Y! O' d+ f/ O& i
- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话( z1 O3 i: Y& Q- p8 q0 G
* n* p. r/ P0 c" p2 {* |- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址 i. [" s H; F/ u% Q! Z
1 `% a. @8 U- P1 W/ K( l9 Q- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)! {" H2 u5 ~/ Z
- 5 T& z9 P; ?* h" c2 G* m1 ~ W
- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话. x0 s: k R+ e8 U$ T% j! A/ [
7 L$ p0 _8 N) ], L$ o" W( m- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱
, g6 C) g$ ?( f3 d
4 ^* D& Z" ^0 d- $content .= 'URL:www.baidu.com' . "\n";//个人主页
" g9 \% d( a+ n% Q8 Y# _ - " F: X. j3 S+ u) |) l
- $content .= 'END:VCARD' . "\n";//结束标志8 r. h2 }3 m( E5 v: j
- 2 i9 a9 b# K2 o$ d! A* W$ |
- QRcode::png($content);
1 @, j2 C" q/ V; y - ( e9 F5 t' f6 ]0 Y6 u; b! O: L
- $ U7 R2 T% i0 h* T
复制代码 O8 K+ r: o: z( T. m. Y
相关文章推荐:
$ y6 S* {( D2 ]- q! J4 H1.PHP生成微信二维码实例6 ~% b( w% E9 N
2.php网址转换生成二维码
/ I' s) X- v$ v* T相关视频推荐:
/ N G* B7 S$ L1 x6 \1.独孤九贱(4)_PHP视频教程$ H$ \* I1 B: Z p2 A4 T6 H; u0 E1 W
二、JQUERY生成QR CODE
2 X4 b0 Z7 e7 V# l( @源码地址:https://github.com/jeromeetienne/jquery-qrcode
9 P/ a" I: H1 j9 R5 e" {
k- ^( G# r& p* k9 Ujquery_create.php
' V$ u0 w# B1 B) b6 W5 x
( ]( M1 V! j% Q. O; w8 R- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码 1 B- ^3 R- E( Z3 z0 o8 \% l
三、PHP识别二维码
/ M2 `( T2 O) f# H6 w6 Z1、方法一5 e3 r/ V3 n1 X, w% i0 J( K
环境需求,安装如下扩展
+ [* d+ H/ e; d, C6 N: Y- ImageMagick
" X. u. T# U2 K/ y U z2 Y7 P- zbar
2 C. U% }! ^- K+ }- H. V- php-zbarcode
8 Q& _) m( x% J0 O5 w# ~* e, u/ S$ `
2、方法二' \! ^' g8 U: g
PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以' D9 K6 t8 ?% O+ j
qrReader类:https://github.com/baagee/php_QrReader
* n6 \. o! \; x5 h
6 W5 @. C' V1 H' D3 N' @- ( w% d5 A$ S$ |9 W& T% v
- $qrcode = new QrReader('./test_logo.png'); //图片路径& p! r. @+ h( U8 W3 s
, v, X; L+ I6 w0 ^( ~/ p$ J- $text = $qrcode->text(); //返回识别后的文本
; m8 |' s; Z9 P. f" U' F- K - " T$ p3 |) P6 }; H8 d
- echo $text;/ d, o3 \5 I+ o" I" Z$ s
; Q# i$ l2 S8 O& q- ! r* E; v6 I3 s* |. n) G7 K5 m- p
复制代码 5 V g, S; L3 I, F: _! h- j
链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7
5 |+ b) n1 v( h0 [) F7 j, j- e0 [& L5 t4 G7 a
- f$ p$ S8 k4 x- m3 d, w# L
# ]; F8 | J% T
& V1 ], T) z( }+ q6 ^8 `* v$ t4 H
9 _" L8 l; g0 J5 s0 P7 R* [* Z. S p& h6 v
* p, H+ Q* W8 i' e; w& j( d
& f1 f( z# O3 M- L$ Q) v% E1 [" I- |, |/ t. i. F
|
|