本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。8 ]% H7 P' r+ F$ M7 g* A; _
---------------------------------------------------------------------------------------------------
; x7 R, R! k3 Z& M# o- i6 Q二维码的分类
( O9 O8 z4 G1 a% X( x/ l线性堆叠式二维码0 t9 M+ T& A0 o6 @+ R8 y( t; \
" d; Q2 a3 ^5 B' A. b7 v矩阵式二维码
# {1 V& h4 G" G: h m0 ~
/ R/ T8 b. p" k Z x! L: X% T二维码的优缺点
7 ^0 S: h J3 L$ p% q优点5 n& s; ^* w1 G- ]
信息容量大7 A' i+ ?1 I3 ?( {9 h8 x% \
* ^! K: o+ F5 n4 e6 o9 S, \
编码范围广* A5 F6 ~* r- e' _
+ k! `6 D" x2 ?, G3 u x# N
容错能力强
p1 s1 \. g3 }" i9 W3 K! q* t0 K7 c8 d
译码可靠性高
- I( ?) E: X' e# r/ m2 ^) X1 y. C$ G/ ]$ p) u$ B
可引入加密措施& L: }4 t) N/ K2 H
$ n5 v$ M" c- d成本低,易制作
8 E8 ^% j& w) w/ ~: E4 G# c2 l* l/ a: N" {1 n) b
缺点! u9 a- Q m( J3 E- a) P8 C
二维码技术成为手机病毒、钓鱼网站传播的新渠道# ?" A6 _7 H d% V( w9 e
0 w6 F0 |. O+ K; s; L- J4 K信息泄密9 O9 ?& V( r$ b' M
0 y- P S/ D- ^, p1 b5 Q* ]目前流行的三大国际标准; I7 j: ]+ _" Z5 l, M
PDF417:不支持中文# {- Y# z( K+ Y' k( d4 b0 D
1 n: ~! I6 j7 v& h9 [7 iDM:专利未公开,需支付专利费用3 _ t8 {, m5 G* o. Q2 \
. K7 J8 s+ a+ G A) [% w+ JQR CODE:专利公开,支持中文
( Y2 M3 }4 s" s6 G, [# U( G7 U7 c0 s
QR CODE 纠错能力6 y* _3 H% J3 n" P; b
L级:约可纠错7%的数据码字/ n$ j4 F* w% D y# { {
& i" h( U0 i) X: b
M级:约可纠错15%的数据码字/ a0 w) t. f, ^0 m# E! Q
! L0 ]4 b( K' y+ X0 h; _# A; I% E
Q级:约可纠错25%的数据码字
9 E3 o3 Q6 }5 T1 i: H* |8 O9 H( ~* R5 Z' o, k0 G
H级:约可纠错30%的数据码字' T! ?+ Z. j. H( P+ f; k- }
, L% [+ ` O+ {( o
前提条件
2 ^. \( N+ o, O( i" zGD库
; h' u+ C7 W; }/ [$ w# i
- R1 u, |. J6 H' P/ r一、PHP生成QR CODE
- l) S" }' |& g0 T) J4 C2 t官网:http://phpqrcode.sourceforge.net/, b* m( i9 [( O& O9 `4 F* r
! \6 t3 k! l6 Y* R( c& Q7 {0 q) R* p
下载源码:https://github.com/endroid/qr-code
% l r, ^5 Z1 r
, \2 X7 E3 ]+ D5 z目录结构
9 c$ b. E$ E- U% C
H [; `/ c' y" p, t% h; x
5 d ]& T* v2 p9 R1、qrcode_create.php
# {* m ?: t. b1 t2 l* cps:生成普通二维码4 G9 r* w* E! d4 s: p0 f& ?
- & D+ q3 ?' F' `4 ]5 }
- include_once "./qrcode/phpqrcode.php";/**
$ X3 n2 d/ e9 b
% h$ h/ m- L6 |6 h- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径( O$ u6 v% H. D3 L7 N
- * f1 R- t2 A0 Z$ A
- * 在浏览器上直接生成一个二维码(内容为abc)
3 Q+ \, i; F5 n7 X - 6 F8 z; I2 y2 w8 c7 C
- */QRcode::png("abc");
! p) a; a3 V2 s' o( O" F
- z$ F$ {1 R8 l5 M+ A/ D4 x- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**
7 R5 m+ Z1 C4 q: k7 [* _3 t
3 G0 L0 d) }- \6 R8 |( F9 V0 B8 i- * 生成文件到本地
1 ]% ]" f0 c1 L) V# P& Z - ?: F( r: k) }' Q G
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)( [1 B9 w5 f& s4 R) j7 i
- " ?8 E5 b7 @# l& K+ y
- * PS:$saveandprint源码的p6参数做了修改
- M2 |+ L. j+ [+ A% J - , M7 x! U" u/ k+ k) M8 E
- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);* g1 l6 N: w2 v' o! y
- . J( l+ I }4 `/ w3 @; G
- ' u. E, w% S! s" n& H' S) t) \
复制代码 0 J1 g! U' s9 i0 o3 ]" Q# a
2、qrcode_logo.php
9 {# K+ X+ b5 d9 x. Rps:生成带Logo的二维码- ! s4 P7 z# c+ h! k! v4 m9 ]
- /**
1 o6 a3 n# @# ] - 5 ]. p7 `6 n& O0 H/ ]9 l1 Y
- * Created by PhpStorm.
/ v! D: o, E, V1 y" @" r* ~; a& ~ - 1 L# N! }$ E- l$ n; `
- * User: user
4 e) N3 {' f7 N! r( y - ; x4 l8 z/ R: f7 m7 @
- * Date: 2018/8/16 c. O* a& G& t; k% t0 j/ T
- ( i7 [% x0 `9 J
- * Time: 10:43% _2 Z. K. S$ r j' a
4 _7 l+ {4 T% }1 |6 h% J- t- */include "./qrcode/phpqrcode.php";$txt = "测试内容";
" x+ S' ]5 ^ q- _3 z, [$ ~
, h' g) X) [% k8 V T l+ D- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称$ ^+ x( A+ a" ~& F3 L$ t: L0 r
- 5 @. x- n* E0 o4 e5 f% {3 _1 Q
- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是
. r: Q* G& K4 W, E/ O6 Q. }3 k/ s
; u: W+ I2 B- h- $margin = 2;//边距
$ }; W6 I) _' [6 K' x - $ f* `+ f# n0 l' S" v
- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片/ g1 N8 t0 k$ }+ R
- 5 G: c9 b. l0 V ^( `( W1 j+ ?+ Y
- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){
) A, r { X v7 _* k% Z - + Z* \3 ?9 K l8 h2 e( t, b* A$ G4 y
- $QR = $picPathAndName; //已经生成的原始二维码图
9 G# R" F5 y) ? - 9 B! w$ ?4 F u8 s
- $Logo = './pic/logo.png'; 8 w7 L2 z& g; ?# @ D" R
) O: K4 a4 g* X( ?) z; S% i- $Logo_re = './pic/test_logo.png'; ; d# Y" L6 `5 j5 t1 ] T
0 ?4 o# k! E1 U i- $QR = imagecreatefromstring(file_get_contents($QR));
* a: f. }) @$ W2 m( V& B( e, d - ' b' h4 R7 j8 j1 Q/ s
- $Logo = imagecreatefromstring(file_get_contents($Logo)); & w8 v* N4 P( ?' p1 A" A( v/ c
- 8 O% ]6 h2 e: s/ \
- $QR_width = imagesx($QR); //二维码图片宽度0 M9 w+ i1 D; o1 U; z% S+ u
- 6 `! k1 f9 f' m+ p
- $QR_height = imagesy($QR); //二维码图片高度
/ y7 Q- V4 r2 e6 \ p - / M/ X9 U2 g9 H, q) } I0 m
- $logo_width = imagesx($Logo); //logo图片宽度
# _' G$ d% O/ E. ^) i& f
% a4 C( \+ k! i9 ]3 |- $logo_height = imagesy($Logo); //logo图片高度
2 E. |$ p) `/ [- l - 4 v8 B4 v( {5 H: j
- $logo_qr_width = $QR_width / 5;
7 E, Z5 N0 q* O1 Z; ^. ?+ @6 M& G - ) ~/ D4 [7 g; r, ~ g' h) C
- $scale = $logo_width / $logo_qr_width;
% s1 A& C$ ?* m. R! n
( D- v6 o0 s1 W2 ~) x- $logo_qr_height = $logo_height / $scale; 5 {: a3 l4 ^1 j
- 2 W; F* u3 c2 x* m3 C# w. _% k# Y M
- $from_width = ($QR_width - $logo_qr_width) / 2;$ E( Q0 l5 P; P6 }% U7 {% P, H' Z
- ' Z. u* L- v; l8 c
- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height); # u8 Q+ [0 j: o: v3 ~% P* ?
* B8 M/ N1 @) j3 h& f8 S) z, O- //输出图片+ h( F) v8 G6 c5 w! u& b# z
- 6 B0 }7 ]- a' D: L3 W' ^3 L
- imagepng($QR, $Logo_re);
6 E( m/ z. Q* B. K6 S+ O; [ - ! Q. a( E' z3 K% A+ [: m. ?) ?
- }
" W9 v i% ?" c' E( k6 o
5 ?0 F2 ~' z2 |, l# H C0 q- & y% N7 ~: C$ M9 t5 B9 ~; N: A. Z. e
复制代码 3、qrcode_vcard.php (生成电子签名)5 p* x3 b9 E+ m+ E$ c3 B& s
0 k4 @# F- _' _vCard格式:https://zh.wikipedia.org/wiki/VCard S+ z; ]8 ^0 `
) ?; A3 `4 o. M2 L# x
- 8 u* U0 e6 b3 Z7 k4 h) W+ X$ q
- * Created by PhpStorm.
* A3 ^* Q: v- [, n. k" ^
3 N9 V0 d( z- Q4 ]3 r7 I( }! W- * User: user
7 G8 |* j& l: C
1 h# Y2 ]5 \' u" p- * Date: 2018/8/15
: I! S! j {8 v4 R4 Z" q+ U
; ?8 M8 q a3 R% s3 w4 e! Z- * Time: 23:00
+ A) E1 @. j! i# _ - : I, o2 @ L1 p9 t7 M# x0 d
- */require_once "./qrcode/phpqrcode.php";/**. \( P) y! v# l
- " A8 y" _3 @! K! D# U( |6 A) s* Y
- * 生成电子签名8 d+ R$ i# B/ {7 ~0 c7 I7 B& ?
- 8 I* \" E( ~5 u0 u
- * PS;使用微信扫描二维码
, I- U" M; s, v5 E$ i/ a$ O6 j w! w- }
% |: l, j. ^: V5 b- */$content = 'BEGIN:VCARD' . "\n";//起始标志
- _9 b$ n# X Z - * t/ C' v& `$ P. m# x' ~
- $content .= 'VERSION:2.1' . "\n";//当前版本
' [1 U2 w* a! |$ i6 n ^/ i - 4 {- X5 y+ z6 u. ~$ C
- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名: q$ u) I' U. _
- ; O" D' @7 E5 z+ T8 j: D, \- @
- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称
( L1 W- N* t O7 }& z1 ? - / A9 s8 k# u& o; n$ X
- $content .= 'TITLE:PHP研发程序员' . "\n";//职位+ ~# F! N, _; X# g- `! R
- ) k9 Z5 c! N4 r
- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话
/ j# h. }- _ ^ m* C - ; @8 \/ x4 R' O Y* z% i1 I
- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址: K! `' `' N; q0 D- @
* e; @1 X6 Q i. v/ j7 i8 y4 r3 Q4 L- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)8 T$ b8 o K/ k9 |6 o
- 2 b# b) \- E1 R4 ~
- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话7 N6 L" \/ \* M7 d8 Q
, Q! P1 a% X7 H- p9 F8 R: r- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱. F+ y4 {: S% g. q9 v
- ) N% P4 h) i' m- @ \) l
- $content .= 'URL:www.baidu.com' . "\n";//个人主页: C" \4 C/ X, _$ i# Z( I" [' [8 A
! J* M5 |$ X3 b! j8 t3 R9 C" y. c$ Z7 e- $content .= 'END:VCARD' . "\n";//结束标志
; i1 W4 C) f7 n1 } - 9 H* o% W; y m) B1 h
- QRcode::png($content);
) Q; i, i7 T4 r! ^- [& U - 8 W! x f1 {& E# ]+ F7 M: b" @" _
- ' g5 G2 F+ X- z# X( l
复制代码 3 D+ ?" j& f: d& }
相关文章推荐:, y5 o0 h1 V0 y1 I. ?! {
1.PHP生成微信二维码实例 \2 I& e8 Q2 ]: w) |
2.php网址转换生成二维码
% T0 J4 m. Z; p- n3 R相关视频推荐:* s& y' L; I! U& v) U
1.独孤九贱(4)_PHP视频教程
9 N. B& ^, `, ` _+ c0 Q/ m+ E8 e二、JQUERY生成QR CODE
9 ~1 j" w- X$ C- o* ` l源码地址:https://github.com/jeromeetienne/jquery-qrcode
( |, y2 W. m S# e5 Q
- V* W3 E( T3 ^jquery_create.php$ W: @; U9 T: V0 Y) ?% q9 _( v
8 F0 }. G) Z# s7 d( h- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码
2 d% I# _0 | {/ H三、PHP识别二维码5 Z6 X& b' _' T4 \5 v1 R; v; i
1、方法一1 z" r+ `4 B/ J+ P5 u- ~3 n9 {
环境需求,安装如下扩展0 n6 n' E" Q' @- K5 j# q
- ImageMagick+ I1 q7 }. y' R. A) k/ J
- zbar
% L1 t7 n- X- c7 ?1 r% S! B0 M- php-zbarcode0 f6 k& ^4 }3 \- ]+ T: d
8 {, S, R; o* c4 `7 A
2、方法二) k/ j4 |6 j Z
PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以3 k$ T s3 f& X2 W8 F& m" }6 x" q0 M; T
qrReader类:https://github.com/baagee/php_QrReader( k# Q& H' L6 f7 B2 `; L8 ]+ `
3 C# M8 E- B% H3 V/ b' O" Z
/ I0 c* Y1 U* B1 O& q- $qrcode = new QrReader('./test_logo.png'); //图片路径& B' y9 i3 \9 x( d! |0 I
- ; w7 k0 d* M: z" i' N
- $text = $qrcode->text(); //返回识别后的文本+ I3 a: a0 x# K2 a8 X
5 J' [) a4 i! f* U- echo $text;) z `$ J' s) [# g& \
- ( e5 e- g' I E% \! h/ S
% Z( X: ~, a, F* a
复制代码
. L6 x' g6 [8 |: }链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7" \: K% V6 L% B! b
1 j H# y% u& \6 z8 T z
$ D# H2 |2 t3 X, b; g; r6 b
1 `( R/ w$ w1 z1 r( A- Y L* ~- J
# L! ~: }5 r# W# d, {4 x
- A! H9 f0 h" }" s8 L i' ^: l8 l6 U3 [& j0 V
- m* Z5 ^) e& {4 @0 U$ @. }3 y
9 ^! {7 |2 T2 K/ }8 E1 r' \
1 y1 D2 z6 C. \7 D' O |