本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
/ C+ J8 `% m. x6 Y---------------------------------------------------------------------------------------------------
+ ~" o7 `$ T% |$ p$ R# `二维码的分类
! C& |* j% T* \: g c线性堆叠式二维码! @: {6 b4 J' H6 T" ~0 S7 c, N
4 T/ c4 v- W" u8 {( }- W
矩阵式二维码
- E3 E% d# y# ?8 G+ r$ K: D( P7 ?! D) t/ c9 q" [
二维码的优缺点
& y7 _, |6 G% x& L优点$ e" A6 s: A7 J1 F. Y
信息容量大
- Q6 [' e* S @3 v. V, u( `6 M! v+ ~0 p9 I* P4 R% ~" X* o; _
编码范围广
/ n" X$ b4 Y& h0 Q. I; X3 w+ }- b2 ?2 c' r6 l. J! I' j8 \: v/ k5 n
容错能力强
6 E+ h' ]+ y, Q' U8 D3 z+ K/ {7 S9 I6 A
译码可靠性高
& ~" P9 z/ q8 a9 q: q; Z8 H
7 |3 r- i- |. r可引入加密措施/ b; F* S% V" m1 K, B2 \& t* j
" M; ~6 |" A2 a( X* G1 j. W3 b2 ]成本低,易制作 B. i( D2 ^2 i9 K J
0 c" Q' v; x0 t5 Z, H; L5 C0 z
缺点
4 ~% z% e+ ?9 r+ n% [; }$ g二维码技术成为手机病毒、钓鱼网站传播的新渠道% {# j- F* v l/ y% S- z
( k, e2 g* c$ `$ k R信息泄密1 T/ d4 V7 q% D, y; y
# s8 K" j f, b( N/ {# l
目前流行的三大国际标准4 i8 ~6 W5 I" j! P% C
PDF417:不支持中文
* K$ ~/ a! @& }: }6 p& ]0 y3 P& D; d- C) H5 ]
DM:专利未公开,需支付专利费用
5 e/ |$ \& d7 W5 F& q+ H) x
) Q% W9 b" ?2 Y6 NQR CODE:专利公开,支持中文3 e [5 W3 R' D5 u; J9 M$ F& v
. R% p: t- U) _+ E" Z$ V H2 @9 s
QR CODE 纠错能力% A3 {- _) P$ I. v) `2 S
L级:约可纠错7%的数据码字
1 s/ f+ C. S# W" Q: \! q! X# z9 R% T# W7 D& J' z! }! [
M级:约可纠错15%的数据码字" Q# m% h3 l6 v& U0 H; F
& U+ T; T6 H& @( Y @/ M- wQ级:约可纠错25%的数据码字
. ~: d' Q4 z, p4 v4 C2 O
3 C# u- g& V3 UH级:约可纠错30%的数据码字
. W: Z0 Q, r- `
* Y% _! t' p/ c6 G6 X$ T前提条件1 G2 Q% \' a/ ?" E( r0 n7 o
GD库
7 x% q5 m' g3 h3 t" o
3 A4 s% \+ `- r一、PHP生成QR CODE
% P h7 i o4 d1 r0 @官网:http://phpqrcode.sourceforge.net/
3 t+ g" ~% [9 H) l+ O, s& k- S7 _2 i0 B
下载源码:https://github.com/endroid/qr-code2 k8 v# @- h2 T1 z2 m4 G. q
8 ]9 D/ n* `& h) N目录结构
! ]! K. t8 n/ m) T
4 W7 ~7 `* q. K# [/ X- v
& M+ P0 V2 g& C9 d
1、qrcode_create.php
+ ^9 e. [ j/ J* Y7 _# Sps:生成普通二维码
5 ?+ q' U# i4 v' J5 f, }- + ? V7 M M+ W- e
- include_once "./qrcode/phpqrcode.php";/**5 J1 n! g( G8 n; V. {) v) S5 U
0 Y- i3 B! i3 Q4 [) X" V' P- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径7 c6 L" Q; K( W6 e: }
D- v, }* U1 X" {: e a6 `- * 在浏览器上直接生成一个二维码(内容为abc)$ e) c; F( z+ ]6 r7 t9 Y
! Z& z; F0 n& ?0 G9 a0 |, h. c- */QRcode::png("abc");8 U( [; v; I# b4 `; E* \
- 9 t/ [2 e! u! c$ w
- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**
8 q2 h x5 F0 z/ U) S
$ Q0 k7 X5 D C( T3 [. l H- * 生成文件到本地
) u% [0 U1 @6 ^/ i: p
8 e, X4 [6 _7 _; }- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)' H3 l& u H- |: r/ h! c l& }3 t
- 9 {) K/ e( J6 ?
- * PS:$saveandprint源码的p6参数做了修改
! o; O" i! x8 y; r4 o$ r
5 X- m( L9 |$ @/ M, Q- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);- F! L( M, F! Q
- # H- r9 W4 h! r6 F
* U. |, d6 J$ v/ \6 j& G6 n1 i
复制代码 1 T1 e, o8 G9 s7 U2 z5 Z- X' q
2、qrcode_logo.php
* C$ n6 P- I! G3 ~ps:生成带Logo的二维码- # m7 ?4 u5 k! t. i
- /**! ?6 o3 N5 K8 s& D9 ~. f+ l }0 A
& |/ \' t; u, J- * Created by PhpStorm.
/ [* a4 V% e+ N
7 v( z0 g1 p% h$ Q# ?- * User: user. [: z: e& Z2 g7 e
6 Z1 Q" w6 D, J: H( r6 ~! p( a- * Date: 2018/8/162 K$ m0 D0 q2 d' T, C
! ?8 r4 u" e$ m+ f4 z9 Z- * Time: 10:43
. F( F T% I1 d/ b9 F9 l
7 q# @8 q" W; V1 u3 Z! |. M) Z- */include "./qrcode/phpqrcode.php";$txt = "测试内容";
# o q: b! i& ~/ p* k$ N! ~% W - 5 z" Z/ V* y) C( F1 h
- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称 C/ n; M+ B$ z9 t$ H: b5 x
- : B* \9 v/ O1 G# r
- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是
- }& d. Y* W9 k6 Y8 h1 N2 }9 f
, |6 K* A: s# Z: e- $margin = 2;//边距
* b" Z- p9 G C0 X0 _ - 5 m1 \; A% k# t6 N( e. S- S
- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片8 {- H/ ~+ G) ~& Z
- + x3 k1 n6 s( f- ?* d( C: H
- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){ 0 O `7 M; T* R& ]8 H+ {
- 8 J$ w$ Q3 S9 }" Q' k- O
- $QR = $picPathAndName; //已经生成的原始二维码图3 Z) ~! x! F" E8 C; X7 v/ o
- / P: [ M& M$ ~/ U( }2 D
- $Logo = './pic/logo.png'; 2 g1 `6 l W8 T1 n8 _4 X6 }
- , `$ _0 z4 V7 w
- $Logo_re = './pic/test_logo.png';
S; t. x3 e1 S! J Q
5 {3 K1 `0 W" o6 T3 f! K- $QR = imagecreatefromstring(file_get_contents($QR)); * a" s1 w8 h- \, Y7 C% r6 \+ s9 Z
6 F5 j- ?# d- R- $Logo = imagecreatefromstring(file_get_contents($Logo));
4 T0 ]6 L& w, c
: i; m4 V6 J9 p7 Q( b1 \- $QR_width = imagesx($QR); //二维码图片宽度
) D6 M* j' h, h% w) Y% n# O- T
1 }8 J* ?4 o- Y) D( F7 q0 i- H- $QR_height = imagesy($QR); //二维码图片高度7 C( h0 x' B! O
- # M' ]2 i0 A& |7 c- ~0 ~ a. f
- $logo_width = imagesx($Logo); //logo图片宽度
( p' f$ \) E. l4 F4 ` - 7 j" ]9 P3 M: Y4 X+ u0 G9 F
- $logo_height = imagesy($Logo); //logo图片高度
- R' Y3 n* \5 ?9 y/ H8 W - & B; a% B0 c q5 E
- $logo_qr_width = $QR_width / 5; : G7 @1 _& V, |3 @/ X3 }, H
, F7 U2 r6 C+ R/ Q/ D; q- $scale = $logo_width / $logo_qr_width; / I8 V4 D2 c) p% ]
- " W5 i& z/ h, D: }* D# B# h
- $logo_qr_height = $logo_height / $scale;
1 \* [/ J+ Q) s3 l/ R5 [- R, v - : n" Q# F/ j' {; @
- $from_width = ($QR_width - $logo_qr_width) / 2;
& Y$ F9 `- Z" L' L( ?* g4 R, x; R3 l
l+ m( k, b# H3 R5 I- `- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
. C+ v' d9 H# \4 K# `' X0 X
4 d( t+ s4 V3 C) v- //输出图片
, Y' `2 \ _: t, v" t0 M! O - 7 f1 M$ |4 O) P6 M E( o; S$ V5 U/ ^
- imagepng($QR, $Logo_re);( i1 S4 `0 y4 Z J' D G( S
- * v5 q. I0 D( i L" P: w; B
- }; `' c, F8 b6 h- J$ w: L
( O1 b) u1 x( e- v* n: ^- % r2 K: u4 v/ l3 o' T
复制代码 3、qrcode_vcard.php (生成电子签名)
0 F: P" O; `3 ?, b# \. V
: }! ^( j7 P }* wvCard格式:https://zh.wikipedia.org/wiki/VCard
. l0 ^& q0 |5 _( j; @8 }- J2 u5 }0 s1 u$ r% Z/ l
" M) Y. G. d6 H8 Z! ~5 M- * Created by PhpStorm.; c0 M% q/ W6 [' j: d+ \
- H6 Q/ u- ^( h" ?3 A% Z* U. f- * User: user6 ]+ I# t3 h9 Q; ~
- 4 a# @% Z! G. S$ D: f
- * Date: 2018/8/154 I2 D& d# ^4 Q3 S6 {
- 2 n# o" d$ k* ]# r8 O
- * Time: 23:00
# Q# r V0 k X6 r6 @ - 0 `; u9 |: M+ j9 |! F+ c" F/ q
- */require_once "./qrcode/phpqrcode.php";/**# b) l/ x; L' R3 h
- / f) V6 o ?* a
- * 生成电子签名
: u2 J5 ^$ n9 Q$ t - 5 n. q2 X/ v+ J" o3 P q4 ~
- * PS;使用微信扫描二维码 s+ l+ }5 P7 q: c5 k( e2 [. [
: r7 X( u+ j0 |3 y( b8 t% }# \- */$content = 'BEGIN:VCARD' . "\n";//起始标志
; K/ g0 t! Z; ?! U: _, C
! y1 w& P. x9 h3 z/ }- $content .= 'VERSION:2.1' . "\n";//当前版本
% G' @7 I% S/ J* z, Z* |4 A6 U2 [
2 i B `8 B: z X9 B5 O6 a% ]# k- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名, h* C2 W; m2 [$ j
! o4 i, @: l3 R }8 }- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称
. [& b6 ?- ]1 F1 E0 V* Z - ; y4 z! C ]) ~
- $content .= 'TITLE:PHP研发程序员' . "\n";//职位5 u1 ]4 F+ X. h0 U/ I$ b
1 j4 M" v9 L3 t7 k- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话
o3 s# r7 ^$ E+ K - : E, F/ m. q9 w+ z
- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址) w+ Y' u( _6 P8 M
- 9 `) G u6 u6 P
- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)
' K. U# M* W0 {6 x( F
+ U( l& \& c" \- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话1 M0 u3 Z C2 w
- + |2 B$ T E3 s2 g) K
- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱+ C2 s+ z0 K I' y- T5 q: o! S+ V+ e
& x5 A7 }) K7 X# _% `3 d- $content .= 'URL:www.baidu.com' . "\n";//个人主页
# B+ C# D3 K* v( E5 G4 y5 Y
1 T9 q, c; u: F8 M# `: a4 Q- $content .= 'END:VCARD' . "\n";//结束标志
" V5 \2 g" w$ `# Q - - _' w7 j. C' w# O0 {$ y/ }4 O
- QRcode::png($content);
~$ q, j% l+ |% I5 F7 R - # j. A: R: a% M5 N3 k, Q
- 6 x3 B; M9 d: D, P
复制代码
7 E: z* ^/ u$ A( \: q+ Y相关文章推荐:
7 e- U& u: W8 W/ E& b# E, h$ X1.PHP生成微信二维码实例7 G- T0 J7 f3 y3 t
2.php网址转换生成二维码5 j. F, ]( ~% N$ `
相关视频推荐:
I/ {7 `- b2 I) D1.独孤九贱(4)_PHP视频教程
8 U3 f7 ]& R2 E二、JQUERY生成QR CODE$ S: H9 L7 @5 P. P$ B- n( |
源码地址:https://github.com/jeromeetienne/jquery-qrcode
3 ^; F0 X! O, K
+ C! v i1 M1 d7 h- @jquery_create.php
) ^* C' Q. x* l0 T( z. O4 H- w- Z; r/ k' i3 c
- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码
5 _* B7 g: \8 A7 l9 j, l9 Z三、PHP识别二维码
: ` m% x$ P y: n/ |4 y1、方法一! G. j9 z$ H0 N [
环境需求,安装如下扩展
9 L$ r5 {. @8 _# O( H2 X7 W- ImageMagick
1 T4 Y A8 O/ h; N g- zbar
7 q! V* _5 Q2 D& n& x# Z- php-zbarcode
, w1 L3 X0 l# z7 z* }0 m
" F! g* K" N) K0 a; X2、方法二
& g9 p8 T& l) Y! u b J" ^# Y! VPHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以
: o7 ^$ z( L7 k, t3 a0 TqrReader类:https://github.com/baagee/php_QrReader. O4 H) |! M8 T% ]* X) P0 N0 D5 T1 l
% \) D6 o, h( X) K! Z/ B( t- P0 b
! x) d/ x# K) A0 |: P- $qrcode = new QrReader('./test_logo.png'); //图片路径
+ }! @) j6 H' \# f - / W* u: |, e7 d3 g" R1 b
- $text = $qrcode->text(); //返回识别后的文本5 X$ N- ~7 @# I o
- - K6 S9 Q) V! R. W. F: @1 H
- echo $text;
" [4 s8 U% l9 Q0 d& f' @, m - + C+ W* ]( T1 e7 U9 I
; [7 s5 o# Z0 [7 u" ?9 M% n5 ~' C
复制代码
6 l) M8 Y7 Q0 j链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7
- R: X: g U$ v* o3 F0 @5 h4 J* W
7 k& {5 {% ~2 i5 a
! u; q0 A G) R( b! u$ j
7 u7 ~' J; `" i+ {" J# g! t$ n2 u* \" C0 P
* {# a) W. `5 ^2 u! l
f8 X6 c' e" a* H+ v6 @$ e6 R B
3 s. f' m' ^) c+ o- S# y! J& ^5 ~9 y( j. J
$ d/ \! {* `8 M4 [3 }+ h D
|