本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
$ U* J% A7 \/ c. d' X" N$ l---------------------------------------------------------------------------------------------------
4 d: m) j, Q' O% d& S二维码的分类
* `/ V& O+ u, B C6 M7 G! h$ {线性堆叠式二维码" L$ t/ s5 Z7 S9 L
; N! B+ `8 w/ C$ E6 s
矩阵式二维码
. L1 Y; ~* P2 D' H+ L& r3 ~- i/ r
' l' z5 ]8 g4 V, W# I二维码的优缺点
; e0 ?: y( }' e% q4 q6 E, R! P优点
$ O; V$ s3 C; k" s信息容量大8 O! X1 z7 \3 m. k: D
! _! y! A9 y9 e
编码范围广$ T: A2 L5 c( a$ I# O
; u3 L( E" m: O; Q4 t) A2 I0 D容错能力强
* U+ A$ R( @" J# D1 m: ]1 m6 ^( r7 e/ N
译码可靠性高 ?2 w- k' V. a: @
4 T* F. G! H4 y) l+ o% U
可引入加密措施, k; b1 P# B1 p1 C3 P' k" r( l
5 t9 q: V1 x) t) X1 n
成本低,易制作# W* J H% f9 M$ I8 i) o/ G
3 L) p' r [8 S" ^3 _缺点7 p& k0 b7 s, S3 @1 @- B
二维码技术成为手机病毒、钓鱼网站传播的新渠道3 E, D9 Z& i( a0 [$ t1 ~
' t9 E! h, p! i9 r! Z) j( x6 g; n信息泄密
3 k% _* |7 E9 ?' D/ p" l" O
/ E9 }" h1 p4 s目前流行的三大国际标准
' J: b* p& R7 g h8 }PDF417:不支持中文' ~1 {5 f8 {$ d+ h8 _) b) F
x8 |( m" x0 H& S( K) E
DM:专利未公开,需支付专利费用
& b; m: W1 U5 O9 W5 A8 q1 E8 h' y4 a7 ]& x$ h
QR CODE:专利公开,支持中文
3 P/ ^) _0 |) |
4 U- _8 T: L% w8 a% `QR CODE 纠错能力& L' k4 B' t# A. W( e0 P+ g
L级:约可纠错7%的数据码字
l8 p/ _+ n9 ^3 a8 @& ]
1 n {; A1 u" w9 q+ DM级:约可纠错15%的数据码字/ D; `5 e% G" d0 b( u$ e6 r2 K/ t- f
8 V* H* n- C5 ~1 h6 qQ级:约可纠错25%的数据码字
$ x8 K" v3 k- |" N9 T; E
* y! ^% ~) [4 I# m2 k. I+ H' l: I4 gH级:约可纠错30%的数据码字
R! S6 T; ?9 o, C+ M3 ]3 t e8 \4 X [" _
前提条件
# l' d; I/ ?3 YGD库
3 K/ a6 o! Z( t# g7 ]. w' b! G( D* g, e4 F7 N
一、PHP生成QR CODE
5 C: P4 }% v# Z+ d0 n+ k; Z) m6 [官网:http://phpqrcode.sourceforge.net/
, l/ Y' L/ I/ k* |: m4 _ G+ B6 o g g& J
下载源码:https://github.com/endroid/qr-code
! [3 b2 E( x4 X0 K' ]/ F' x0 C
: S) O- p+ V" F3 e2 A" P目录结构
8 k8 i7 t) J- J/ o$ H' B+ ~/ I7 Z. c: m
6 X9 y1 I' @: _9 [
9 a% h+ Z x3 c$ Q0 W1、qrcode_create.php
( p# Z, ^* [6 o4 g2 ?ps:生成普通二维码6 R. r& y/ H: J9 Y; N) G4 G& h
5 ^8 g$ P! l' @% I' W- @0 R5 }- include_once "./qrcode/phpqrcode.php";/**
5 M! ^. c" J) [
. ]! o" q4 u% b4 d$ o- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径
7 Q8 B# s% E8 l5 k; _; ^& K
% Z T# r5 I. G0 @. W1 J4 q, j- * 在浏览器上直接生成一个二维码(内容为abc)
8 @1 { D" [3 j& Y - ; _7 ~8 L1 m6 W3 i/ a. H, q n- \
- */QRcode::png("abc");
9 ]9 v. K+ E% \( y( N h8 f0 t L
/ `9 w4 u( N+ F J- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**" [1 C" g/ R& g/ `/ n6 m
- ) P: K; H5 X: Z1 R6 L! U- P
- * 生成文件到本地: k( H0 p+ |- a8 f" E# W% B
- : w1 l! z( u& \3 p2 H% @
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)4 S- x2 |# E+ N. |: x5 `
- " n3 v, v7 F# S f" ?
- * PS:$saveandprint源码的p6参数做了修改
% t$ L- h& v/ Z
: v4 z9 H- X5 |; W, B2 S: @. G" Z1 ~- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);4 l. |/ z2 Q$ _+ v: f
- i- A5 ` C2 a- 2 ~: J a# G4 W+ F6 C0 d
复制代码
3 d3 o- l: e( |8 x e9 F2 {& T2、qrcode_logo.php3 U5 i8 _ U; |$ N# I" N
ps:生成带Logo的二维码
; @" x1 \1 K; @* Q- /**# Q; A- l# y, f% n" s
- ' m5 {. |. {. u% C, X, O1 q
- * Created by PhpStorm.+ L# ?- ?! f$ Z" D6 i
- - C2 |# }# t- b. s
- * User: user3 N3 }0 c4 P n0 }2 B
- Z4 k2 J: h0 |3 T- * Date: 2018/8/16
( ~ a- X7 m6 H. d5 `5 k) H% K$ ]
U7 S( N$ Y5 K" y) j/ Y' |, G- * Time: 10:43
; `6 M3 E6 ?4 S5 r$ \7 O2 A8 j+ g; `
' P- n$ v: ?* p. ?0 E3 f/ U- */include "./qrcode/phpqrcode.php";$txt = "测试内容";: T) K8 t- N5 V. r
& F5 d! f. [' j p4 J4 q- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称
$ Y% ~. j# H+ s - - Y0 s; k+ b Y' h
- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是
0 E3 k3 y6 ]% H& V3 l: J - 3 C0 R3 h+ e1 c* u2 p: R5 P
- $margin = 2;//边距 m2 n( R* S* b9 r
- ) i4 w* z- i# a; f. T0 t8 i
- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片
. D u3 `) f# `% u5 a( Y - , R) R: V2 `* s( I; q) e/ O
- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){ t0 [6 F( r* @; O/ V5 g( K% x
$ j I. a: U; ^8 ^* J4 @' l- $QR = $picPathAndName; //已经生成的原始二维码图
. @8 l. o' k) v/ n$ k
1 t: l% M8 X9 i/ S$ Z4 _7 E1 \- $Logo = './pic/logo.png'; 7 J& t8 s9 F& b$ L5 L" J
, e) X0 B; W9 Z+ x8 u4 P- $Logo_re = './pic/test_logo.png'; ~: K: c) _' L3 H. y
- ' O: }- H( E; h3 @( G7 r7 L
- $QR = imagecreatefromstring(file_get_contents($QR));
8 q9 g" A$ E5 @3 h; A) A% G. d
" n8 H0 x2 }4 U# D' n2 ]" R$ ~- $Logo = imagecreatefromstring(file_get_contents($Logo)); }% k! y+ C. B/ u# E. E$ Y9 \4 k
- # h" D+ t" l# x+ ]2 B4 G. {5 [
- $QR_width = imagesx($QR); //二维码图片宽度4 I% i- f: \# [0 ]. [
3 i# h& S! n6 \; B. p! _$ [- $QR_height = imagesy($QR); //二维码图片高度: V: O+ W' e: T5 A! Q$ C/ t
- 9 {, c6 F; |2 K. b
- $logo_width = imagesx($Logo); //logo图片宽度/ s8 ~' |; l/ `5 w d
& |! s, O7 g3 E; l; a- $logo_height = imagesy($Logo); //logo图片高度! g+ Q/ z2 Q1 _5 V
- ' G7 F3 v" x) F ]
- $logo_qr_width = $QR_width / 5;
4 Y8 W Y) n4 Z! h/ s
! A" J0 \4 a( y1 I1 N, G* Y- $scale = $logo_width / $logo_qr_width; . c7 m) s @7 C, n0 Q
- ' v5 r# P% u/ ?4 L
- $logo_qr_height = $logo_height / $scale; ! V# A# M2 d6 J0 ~" i5 k ^
- + \! h( b; p. n
- $from_width = ($QR_width - $logo_qr_width) / 2;
( j4 [7 \! d* d' w; K0 W - " d/ U, F# P9 A
- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
! P8 h. B- t+ i) v: O, H. L - 3 S7 }7 h H4 N3 s) V1 ]
- //输出图片
# v* ]: y6 X k$ E - k: L, ~! I3 _# L7 V- `
- imagepng($QR, $Logo_re);
( g: u2 o7 \4 v$ m/ C+ p - 3 [5 ^( G. _' j( e7 r3 s
- }
# j( y/ z3 q. C. I- S" Y3 a
* x& I$ T4 `+ q) p: T' `
) _4 M ?6 f, g" V0 Y( w
复制代码 3、qrcode_vcard.php (生成电子签名)( \* w$ k$ |* I3 d. R2 \) R% }
; g8 Q9 a/ V2 ?1 S/ c# D" pvCard格式:https://zh.wikipedia.org/wiki/VCard
$ B; m4 Z/ V+ @( z2 V# U& e: ^. [9 B& q. `& I5 T r
- 1 {) I4 H& l8 l e7 L( |. ^
- * Created by PhpStorm.1 \) H* B- N" }6 j. V! ]
. D; X# w4 ]: {- * User: user5 _1 n9 o/ X; x" J$ F5 s
- $ D' J& b# W( t* G$ N6 U
- * Date: 2018/8/15
$ _0 _+ @6 G7 n; i - 5 `/ n8 X( A3 v/ {9 j6 I$ R
- * Time: 23:00" ^' G" j! x+ U( ], \
# J2 C+ d7 C: `& t N6 D/ m _- */require_once "./qrcode/phpqrcode.php";/**. g2 g* C9 J3 J+ X
- 6 m; y7 N7 t% R- Z; `
- * 生成电子签名* L* @1 A3 f A4 G
- 7 e6 o: K4 V* Q+ C" E( ]
- * PS;使用微信扫描二维码
% O$ ~ b, V9 O( X4 G - " _& i4 ^3 o, G7 \
- */$content = 'BEGIN:VCARD' . "\n";//起始标志
" |% U7 j5 G) R6 }
3 m! @3 b3 M3 j7 L4 I- $content .= 'VERSION:2.1' . "\n";//当前版本0 _0 u3 M: p, H" a
- - p" L7 n$ o( o2 B2 O3 |% i( I
- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名
( C, m5 P2 @# y$ X" q. ~
& l6 Q* I7 W' H8 ]- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称% M- R2 }" k' R h( ^. D" b$ _" m
- ' _6 K! {) S& \4 Q" k. ]
- $content .= 'TITLE:PHP研发程序员' . "\n";//职位0 W$ w6 n+ z5 y/ Q# Q2 }
- ; U- x0 a- G: U0 W4 a1 T n
- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话
. U3 x. C5 `( Z
! h! _ @ L4 Y' G- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址
! N# I) E% T: f/ |
$ v3 V2 R7 v# J& \& I# V- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)
; o. h7 `8 {; ~3 B. u
% E4 J' O( R) o- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话) O% J, h/ H. k+ h$ v
- 6 J' D; t0 { Z# ^! [0 y
- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱+ @$ }4 A9 }7 V- G/ U2 {- ^
2 N8 D) H Z+ d# |7 B, \; w) W. B8 B- $content .= 'URL:www.baidu.com' . "\n";//个人主页
% T9 n [; i8 d' \5 b% p3 p# b0 ` - 0 p: N( A% |/ i$ X9 w
- $content .= 'END:VCARD' . "\n";//结束标志0 _' c6 R8 M- Y" g, \
/ U) S; {/ @9 R$ A- QRcode::png($content); R* \% `: J2 H U( D
6 o. u. I6 O: r( f
9 _5 C* X8 J4 d- ?6 X
复制代码
* H, D+ O4 d, W8 y1 }1 W: j相关文章推荐:$ |" s3 U6 ]' d: U1 w
1.PHP生成微信二维码实例0 k+ s) w) h" z6 H! Q+ q4 F! O( b1 X
2.php网址转换生成二维码( a3 q. ]2 G" L, Y% s
相关视频推荐:. R/ \4 ?2 O8 X' W2 N* i# b+ V/ P
1.独孤九贱(4)_PHP视频教程
4 ^& n+ z9 c; J+ o3 ]二、JQUERY生成QR CODE
1 E- V4 w- r8 c+ S! D源码地址:https://github.com/jeromeetienne/jquery-qrcode
+ u `! u6 z2 T$ ^/ [
- h' ^2 G0 j6 |# D# j( [jquery_create.php2 d& q& X; R/ B* z# _& k$ X
+ n* K+ f1 I. M' Q z. e- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码 ! W( s' ?5 J. j
三、PHP识别二维码
$ C; |0 U- U) s3 u# _1、方法一
: R$ U. W+ s" C4 ?' A; N5 i环境需求,安装如下扩展: Y' H, A/ I5 E+ [2 k0 F3 S4 Z4 R
- ImageMagick/ r. C! P. _( j4 H' W' S) X) a
- zbar
: I# G+ p g3 _( f- L6 d1 R- php-zbarcode# Y9 s0 B; i7 O1 D% w& J5 ]
* t) M; Y6 Y8 [$ X% u+ U$ Z3 c
2、方法二
3 ^/ A. v, ^# c1 L* V/ M6 UPHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以
+ t) p! U0 S. f+ S3 Q7 uqrReader类:https://github.com/baagee/php_QrReader
7 o, K9 q% q0 e4 P, E4 d
6 i6 ]# R6 e8 K* m0 A6 z/ T& K+ `- ; P3 ?* k1 _( E2 u
- $qrcode = new QrReader('./test_logo.png'); //图片路径$ ]8 R* }$ r' T7 q: E- U( W U
- 7 M ]; \" \" D
- $text = $qrcode->text(); //返回识别后的文本* O8 B- t9 {) ?0 F$ p
% |; @: G7 ?2 N1 \8 `) M- echo $text;8 Y" n3 W+ i9 G1 L9 i6 x7 `4 X; v
- 8 |; ^- j) L& p- A- o6 W- @: ]6 b1 O
2 Z2 u7 _+ E; }) A
复制代码 " D( V- Q% q4 x0 o( k2 W1 X& e5 z3 J) E
链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7' h- [8 H7 K' M
% S6 w$ v5 v* v
+ [2 S# @" E+ B; M& M! {: [
; _; d. X1 a0 W$ ]: c0 _
4 A' Y2 `9 V; S" g' O& P1 g3 W3 u7 J" m* `/ c6 G: h
9 J% ~' S Y, b7 Y; B8 P+ x9 r
7 c1 U+ q8 L, O' G4 a1 ~
& d* q% x$ z9 b
4 J* P2 d+ _' A. _7 Q3 o4 }& N |