管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。0 M X$ b6 v: K/ e0 y
---------------------------------------------------------------------------------------------------# d O0 o3 i- N1 m+ x! B; p
二维码的分类
2 y k. z7 C' |" e( z9 f, ^7 V) K线性堆叠式二维码; x/ Y& |0 ?0 @- t# W O: d
: P3 p2 E4 v" M9 \1 U矩阵式二维码0 H2 B/ e: I. P1 v3 `
; {; A4 I$ I0 \$ A/ v二维码的优缺点
0 [: \- k/ }8 x* s6 p优点
" Z) F5 s. X# C! l9 n7 U信息容量大
2 ?! h( N1 I( W- O0 N9 g8 E; N8 i3 b$ V7 @
编码范围广
# Z) ~( I+ v1 A# _, \; D* {. ~
1 w; b$ h: W4 ?, A9 ~: t容错能力强; o6 l- ?* g: P5 b# U( Z: {2 @# K
0 O a9 C! z( \译码可靠性高
! A& d7 Q- [ |/ w. X% S) e5 X
0 p3 U. u' _7 o% W可引入加密措施
6 @4 |3 _4 D! ?5 @6 Q) Z7 b# |; l- @1 s! F$ r
成本低,易制作# p4 o( T0 O9 S) m$ a) \$ P' r
$ Y# r" p5 y k( N) y/ W
缺点
! L' W( b _/ B' u4 N二维码技术成为手机病毒、钓鱼网站传播的新渠道
/ @) Y9 _' E' O$ v3 D, W8 l8 x1 `$ `( \ |9 I$ C; `- L( s+ [
信息泄密
3 l! T: s& B/ Z& y% t
- G7 ~ u3 l- B6 L; T( w目前流行的三大国际标准
! c5 H, p; X+ b8 j* j3 {* L0 n( U* mPDF417:不支持中文* @& E; c+ {. ~+ S5 g+ v
: F+ j. n T9 V" D1 R: X C+ V' C( r
DM:专利未公开,需支付专利费用) K! W4 L1 k# P" B" q H
, G: t# G+ n* \9 ~* o( f
QR CODE:专利公开,支持中文- _# ~6 @( S( D T- T% }& x6 X- J
6 P3 m: l6 M0 \# M
QR CODE 纠错能力
9 S# [4 X a0 A2 fL级:约可纠错7%的数据码字6 l' W q2 @) F; }9 g+ Q3 p* Y
3 Q+ d1 Y; S# HM级:约可纠错15%的数据码字/ e3 g1 t+ p7 m' v
, W* O4 {1 d D8 a' A
Q级:约可纠错25%的数据码字
. Q7 p1 H1 G: o, M2 k3 t0 ^
) i- b" D3 q$ E) uH级:约可纠错30%的数据码字. }, u! U7 h( s$ v0 ]8 j/ Q1 P' ]6 g
- _* O k3 k9 |# _9 @
前提条件
: |6 P% m) q% o( m/ PGD库
& E7 w8 ]* ?4 x) ~$ Q( G0 o' e% Z( X) f+ G& u
一、PHP生成QR CODE
Y: h; p; a8 z) m官网:http://phpqrcode.sourceforge.net/
# U' [1 R; r4 u. U% x C4 @6 {" _# h5 }$ ~1 J2 l4 c1 F- k% i6 a
下载源码:https://github.com/endroid/qr-code2 k, ^7 i6 {; M
8 P* S" H, A7 p目录结构
& O5 H+ e% y, P R* o; |) U, }
* U8 X' i% E+ m& k. q+ ^( {7 X5 T8 u. W- u
1、qrcode_create.php
1 O. {& G/ z& _& lps:生成普通二维码
: Z: T! `7 r8 i0 w' M- 6 H2 j8 g: n$ e+ U7 \. _3 {+ p9 w
- include_once "./qrcode/phpqrcode.php";/**6 i* Q0 L- N ~0 t1 ?
" j T9 |, \' j( i- v5 h7 @- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径
2 q3 w- Q' ^' i8 z; k - 8 O; {( z5 c+ B" s1 y% C
- * 在浏览器上直接生成一个二维码(内容为abc)2 Z" d% U9 e) x; V: n% m
& k# y6 E6 v/ O5 ] H- */QRcode::png("abc");# p$ D5 A; }( _0 a7 O
- 8 J/ D2 Y" ~2 l" @) J: w$ W" s6 C
- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**
! t) \3 w7 `. v8 t; y5 v
7 E7 J4 g9 f/ l) w/ A- * 生成文件到本地0 s" ^% N. k( q! H! u. }* e
- % V1 A# J q$ ~- e x
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)' D5 z! k, c% \+ p! y3 e
; F5 I6 S$ E( T. D$ N/ M- * PS:$saveandprint源码的p6参数做了修改4 a6 u' L& ?5 V$ }+ K
$ u0 t7 u0 l2 b1 q0 u$ \- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);
: k$ m; o- |& V. p( W' w. M
8 T1 n2 F# E! P) T, B- P u: q3 j1 z6 H
复制代码
3 U2 { v, z6 k `2、qrcode_logo.php9 e1 b: |( F7 J3 R& E1 W$ M
ps:生成带Logo的二维码
! n+ `& v, Y! X3 P- /**4 u6 ~4 j: q8 G! m8 b7 t/ z2 y6 a
) L! S. G4 y& }. o% J- * Created by PhpStorm.
2 v6 ~- r6 N( |# z
3 B2 A7 a" I! C- Q- * User: user
( k0 N( d6 K# b5 B0 U( \) L' z
4 }+ P# D: [# u: c( c7 E" [- * Date: 2018/8/165 o N+ S2 g5 Q
- 5 J; q% X8 f |3 ]$ N) N
- * Time: 10:431 F& b5 a/ a- Z
- ) a$ y" y G6 a
- */include "./qrcode/phpqrcode.php";$txt = "测试内容";
1 W7 H4 r. v8 L7 V - 6 X: R" \9 V3 X
- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称
- ~, N# b: r' f8 B4 I; `- w! o' V
3 r$ h" w- q: X+ l1 b* f( q/ w' I0 Z- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是
0 ]) ~" D. M1 @# q: J
7 q# ]/ _% M2 q/ W4 f# A- D- $margin = 2;//边距
& T0 H6 j) ?: ]+ q
# h- f) N' T+ S" p" _( N- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片
- H0 K5 G2 Z- r- Y% h2 s% j
- t; a2 t/ B* ?$ n- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){
; q/ }6 P3 x/ z* M6 u( {4 V1 g
% e# n1 W" d9 V- $QR = $picPathAndName; //已经生成的原始二维码图
- l7 l# P. S4 D' b. @2 d) v3 \
; T: L2 J& X# z, ~; l9 Y' y- $Logo = './pic/logo.png';
* n" V5 r v) E( l
( \$ s+ |# Q; F- $Logo_re = './pic/test_logo.png';
# X& Y# M7 b* e6 a2 g" j! u# C - ; E* }5 r; D, y
- $QR = imagecreatefromstring(file_get_contents($QR)); 6 X+ A& K4 Q! u# K9 `! _
- 0 M5 k5 D: b, F3 \8 C8 U/ _. D. Z4 L. b
- $Logo = imagecreatefromstring(file_get_contents($Logo));
8 V4 e4 `/ G4 E# D5 {9 Y; | - * f& E0 t! J, S8 S0 t- O4 A
- $QR_width = imagesx($QR); //二维码图片宽度3 j. c2 Y6 R: O
2 d7 V' Y4 m8 s6 I5 B$ D+ d6 F- $QR_height = imagesy($QR); //二维码图片高度
5 {$ d/ E/ k/ k2 q1 q1 J8 p3 o) e - . E7 V$ l! f6 ]" p) e, G0 r
- $logo_width = imagesx($Logo); //logo图片宽度0 N) q+ Q) P( g, X9 }; O8 T. j
- $ u. R; i x2 M$ _
- $logo_height = imagesy($Logo); //logo图片高度4 F3 w# h4 F+ l9 b
- 2 t& q2 t: T( u7 G
- $logo_qr_width = $QR_width / 5; ; o2 {+ m O0 `6 [
/ E0 A& q! N7 U8 q3 W" H3 M- $scale = $logo_width / $logo_qr_width; ! S3 {- z, a" A2 D
( q3 F+ x4 ~, d+ A# v- R5 q- $logo_qr_height = $logo_height / $scale;
3 d9 m/ j: A# K
# W9 A) A) K7 p- $from_width = ($QR_width - $logo_qr_width) / 2;
/ q( `2 H" S0 m9 s2 Z3 U* f* _% \/ D - : f2 V% w6 a0 b; J! h( F. e
- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height); ) W- z' Z4 \; L! {5 Y* N! B+ Q8 g6 S
2 n, W5 q, u% [5 b: ]7 N/ W- //输出图片
3 {2 G; q* e9 v - 1 ]- ~1 _( ^% }4 Y( [
- imagepng($QR, $Logo_re);
% t2 h, T# W2 }7 ]
' x. b# i5 a( ~$ Q- }
" B6 b6 q' O6 t' q. X" q% C
5 i( g& U7 _% o2 g1 |
3 f* K$ f+ x# W! F
复制代码 3、qrcode_vcard.php (生成电子签名)
9 p3 L7 n3 ~/ \8 O7 O ?* e5 p4 [4 ?; z9 C! `+ G3 v7 \; y
vCard格式:https://zh.wikipedia.org/wiki/VCard
9 O9 i! @0 s9 {; m1 V$ F! F- e! l) J/ m0 Z6 N$ N x5 d# A
' O1 ^& _* F O: _- * Created by PhpStorm.
: D% \ C" Q: w- D4 I+ \3 Z' J8 o
9 V1 A$ b3 i2 a( q- * User: user
$ ]+ S2 q4 ?3 c- l2 [5 l. t7 T9 P B
# n- }4 k! z0 g0 ^, T8 I- * Date: 2018/8/158 o; V5 m* [0 l4 \0 F
# X4 [3 ]8 i& b o- * Time: 23:00
8 T' [1 A1 o, p2 }
1 X, j7 E4 N! N; d) ?% v- */require_once "./qrcode/phpqrcode.php";/**
1 X: P7 T" k9 V9 c4 K3 f( M. s7 g; X
: h2 `9 r9 `: I+ f- * 生成电子签名
/ a1 ?3 ^2 y9 S. I: |# a0 H3 Q8 g
, s- s# u& Y8 H* Y4 q- * PS;使用微信扫描二维码
( F) I! A7 _+ v* P! `: x# b! `7 W
0 N. H+ a" p+ s8 [8 S- */$content = 'BEGIN:VCARD' . "\n";//起始标志
+ p7 \# h5 J+ S& P
0 k0 ~2 w/ L! W3 B: j- $content .= 'VERSION:2.1' . "\n";//当前版本
+ I3 ~7 P+ Z- W+ K. X3 }( f - 1 s( y1 F+ Y, O
- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名, t& `* K T" D8 }# [
- ; g# s( A+ u" Z3 z7 P2 P/ j
- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称. P3 S! G" F+ x- y' E) D/ G
- 6 m P( q- g8 n: W2 p; Q4 w+ d
- $content .= 'TITLE:PHP研发程序员' . "\n";//职位; S* s8 r& A! Z
- 9 M! a! W0 t( K7 w- E( o& L- ?
- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话 d, w+ h1 k8 k2 K
- : s4 o% C( j% a% `
- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址
; B B# q C6 p - + E: `; j' m' L# Z* _0 O* z& j& K7 U$ E
- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)
$ y8 t- s* V2 ?* Z7 R5 L+ ^0 A - 1 N0 v: M, J" g( V5 j
- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话
3 P- H9 X. e" L' G - c) i6 ^" L7 k. T
- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱! a y0 m$ X8 Z
- : _" H6 ]. M3 v/ ?: S2 a
- $content .= 'URL:www.baidu.com' . "\n";//个人主页
& u; H! B8 c& i. i, c
* r) x( ?; ]: s, U" q- $content .= 'END:VCARD' . "\n";//结束标志. S. o: y( w. L& X$ E
- 4 c% z! k+ b1 i- y- Q2 ^
- QRcode::png($content);6 [8 F& h. z; F; \4 q
4 {6 t3 y, o; g& K. S
" ?5 T/ H( m- h3 V+ m
复制代码
! ?% M+ k7 [4 G, B# }4 C' Q- r* X相关文章推荐:
6 |) ^, M: b% N1.PHP生成微信二维码实例- S4 Y/ d4 J5 \* p& y2 b. _
2.php网址转换生成二维码
& V3 e( y& d3 n, y6 x6 z相关视频推荐:
$ l% _% r" _, r* o0 `2 T1.独孤九贱(4)_PHP视频教程' q" e+ N Z1 D: E" p7 v
二、JQUERY生成QR CODE
& P7 \! F( y) p# o源码地址:https://github.com/jeromeetienne/jquery-qrcode w: R7 Z+ `' V: t: s, P
0 o! A3 z3 r* m* @- G! c `+ l
jquery_create.php0 K% ]: B, U6 e, k
9 _/ j! F6 e2 M6 [" a2 F
- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码 ( k. H" b* J6 q4 \
三、PHP识别二维码
M5 t2 N7 z" S, |1、方法一3 a0 q Z5 y& T v
环境需求,安装如下扩展
1 s$ p% a+ t' S' I; Z- ImageMagick5 i$ C( M! q8 ]! w/ v( h4 O
- zbar
; p! F) p1 t# ]; [8 {9 k* ~2 Q- php-zbarcode
2 ]+ x$ z) Z) y: B6 I2 N) x; y) u4 |4 ~& `' I4 `) G" _
2、方法二+ f/ R/ ]( @$ a+ ~8 R r
PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以
P6 Y7 F. R' E+ oqrReader类:https://github.com/baagee/php_QrReader& o% M3 c0 @# o2 z
, ^" D+ U4 ?6 d, J% m# M) B
5 [$ l; c. N/ Y- $qrcode = new QrReader('./test_logo.png'); //图片路径1 c- D: W j/ e4 p% u
- 3 A$ F' B* J+ B0 {
- $text = $qrcode->text(); //返回识别后的文本+ L& w. S/ K* B" m0 i9 P
& N6 e" c$ v0 F8 e. q- echo $text;0 R* X* ^# Z6 i* I& T. f
- ) o/ ?, B& I) z6 d/ ?; N
0 u6 W' w2 W+ {! m& Z
复制代码
" M" k9 ^1 V8 B# ? C链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7% @7 I5 y C: T' P, `; _2 e
; S; Z8 z- g* \$ e/ [' [3 o. `3 y' }8 M R/ P' m( B, e2 H( b' G# a
% j$ r8 z( q6 l0 j
2 l4 n- Y" e/ F7 @( v6 a
1 J5 D& P1 d* @4 T
3 L( a5 p1 G$ L+ y" U" r% O b* ~7 n: S& T
3 i9 S6 `8 S6 H( l# y8 U Z
: H1 p# J+ l/ `: @ Q. F4 m |
|