管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
: Z! l3 c$ @ p" {---------------------------------------------------------------------------------------------------
4 K) l9 k9 T$ L$ p二维码的分类( r2 @- f8 A, Z
线性堆叠式二维码$ D" z# b* g% |1 {! l- L2 X- p
$ T$ G* x* Y6 a+ U' P( F
矩阵式二维码4 q6 p% G0 j3 a/ {3 d* i7 `
- I6 u* p( p2 R& @6 @% x9 b; j7 ]) V k
二维码的优缺点+ x& M! P3 i& K& U. O0 ~) J5 A
优点6 Z: k' C- u* y% ~, R. w
信息容量大
) ~, c; w! e) v6 N5 l! H" N2 M& A- b% e3 L! D! E
编码范围广- t3 h) g( P/ j* k
' R! o: e" J& i, o, t6 U( p容错能力强, \) l* Q Q4 c
, ]" R- y9 g% h9 f, K- m# L- V" x" k
译码可靠性高 ], ~5 E/ F1 X; T6 X2 M" J3 \" G
" D" K& G- Y6 A' g可引入加密措施
5 @8 }+ D6 o& h
+ f! X+ O/ C& ^ i' ^成本低,易制作
% S9 _. u7 Z" T" U8 J3 J2 X. M9 T. m6 W, R# T/ K1 k
缺点
- X2 V+ F: ^# o7 V$ a+ f二维码技术成为手机病毒、钓鱼网站传播的新渠道, C# y* o( d( _
: L* I9 q$ `9 i+ j; Y- v' D8 a
信息泄密
- f. v2 B8 H8 d/ q$ F, q8 d1 F) z2 X0 V3 @3 p- P3 P, D @
目前流行的三大国际标准
. Z+ T7 t2 k( l3 b' z# uPDF417:不支持中文
9 o6 [$ m; x8 B) w2 m
9 i6 l1 q. @" [' j8 T" \: c% X4 [DM:专利未公开,需支付专利费用9 w% Y6 V# \. B6 @" z
% t7 D/ X. o8 h6 R9 o
QR CODE:专利公开,支持中文" ]2 Y: j" ~4 O, j% X* S) e, P/ l
4 A3 x4 M( U$ O* V
QR CODE 纠错能力 f4 y" H$ \# H' d* D+ L
L级:约可纠错7%的数据码字. ?& U% X5 `+ K# w, y6 T
; R0 Y& H7 T$ y9 `# H0 q$ L$ FM级:约可纠错15%的数据码字
! w8 R( B8 \/ {$ h& }1 j
2 \& n. D+ X1 Z4 [: M0 v/ zQ级:约可纠错25%的数据码字
/ T/ C) l+ r6 c# o) L; `# l& Y {! t0 @
H级:约可纠错30%的数据码字
8 o5 b6 `1 X0 _3 `5 r; s: w/ k# A6 u$ Q
前提条件
/ [6 d; [* E0 P9 P; a+ i, mGD库- a: E/ Z2 i! V& r
$ o7 E5 W9 E& p
一、PHP生成QR CODE
& d: f6 s) r5 ?官网:http://phpqrcode.sourceforge.net/
: _1 `! D/ U, u9 B/ S
9 I' O# }' x, H0 [5 N下载源码:https://github.com/endroid/qr-code3 P. ^6 k/ ]+ T- b
1 ]: a$ `% D# ^8 Y
目录结构- ]& j$ Z+ U: j7 G
- Y# V& Y5 Q( E; J) Y, c) E r" w0 P& w4 X8 P
1、qrcode_create.php
; Q8 J- w3 o; }* j7 @. Dps:生成普通二维码
1 i& U T2 @/ z$ z, I
3 d1 q3 F7 @) T- N4 h3 M8 r- include_once "./qrcode/phpqrcode.php";/**
2 i; z. @3 T9 _* r( v. l( B - ' W8 H/ Y( [! [3 ?- J
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径1 s; b# ?$ c# w0 i
( k) r: J8 {- e1 o, I& p- * 在浏览器上直接生成一个二维码(内容为abc)
" R/ `& J6 M: r4 A - " f/ R2 P/ H& A) `4 W
- */QRcode::png("abc");$ a7 }2 {1 c- d: q
0 g( f- d3 M* L$ Y- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**0 u& p0 v9 f3 x" Z
- + W& h! [" F. S2 a1 Y; I
- * 生成文件到本地4 R0 T0 N6 O* Q$ J
+ s. {( T; e# p2 `- A- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)
% D; y' {$ t& G' V( E
, T; O+ r. D3 h. j- H- * PS:$saveandprint源码的p6参数做了修改
6 L) L: ]* |( C% w: y4 v
# `2 z* j# b3 s7 O O: T- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);
8 }2 Q- R" _- f6 i- j% }/ F - 2 H& \+ f" U. o* l
- ( A5 y" P( h. Y. h
复制代码 : n% k4 g9 z- {
2、qrcode_logo.php& u; l# u" p" E* r1 Q, Q
ps:生成带Logo的二维码
! X4 O1 K+ e6 o6 M( N% {: y- /**$ O2 _: n+ ~" A' u8 l
- 7 U4 l B2 ^1 c. v
- * Created by PhpStorm.6 D- G5 B6 X; f3 u% V& I; B# i
- " {$ K W9 x/ `+ W3 U
- * User: user6 a u& t$ J" N; s% t5 s0 f: R' c/ k
- ) G) y' C; X8 i
- * Date: 2018/8/16 U! e- m7 O; K3 S/ y
- ; f6 ?1 a6 C) ^# T8 H* u. h4 S4 s! y4 q
- * Time: 10:43
8 A5 o2 r0 n* A4 M/ w/ j* Z - % b& L9 [; Q- v$ i" n1 a9 L
- */include "./qrcode/phpqrcode.php";$txt = "测试内容";* R% u& S& C7 F# Z6 g
% Y& [! b: b: a6 x- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称& C/ ], F# P! n+ [/ {
- # n9 r& N7 [# s$ P: V! c
- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是
4 N! z7 `! m0 L* i/ Z - % T2 U, N' p/ h1 n
- $margin = 2;//边距
' S( p' D5 k& \& ?' R; d
% s; J9 E7 _9 ]% a! P! d7 v- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片
" P4 O* i: ]: R7 W" ^; V$ G
, J$ M0 u1 T5 @/ S, k+ M5 `- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){
" ^; X4 B. M9 r& j& _9 w9 s6 h - 3 L3 W1 U+ m0 ]" ~5 ^ ^. f- S- j0 @( v
- $QR = $picPathAndName; //已经生成的原始二维码图
+ m. T; c/ v3 s. j5 A8 B) u# ] - 5 k+ }% E1 ]% F' N6 P2 ^. k, {
- $Logo = './pic/logo.png';
! ?8 l. N+ i. ^ - + A b3 ]* A+ e. `9 ] r& M1 W* f2 N
- $Logo_re = './pic/test_logo.png';
! H" f; h; y' ^3 {5 }9 ^ - " k: X( j( d4 y9 U5 u, N, ^
- $QR = imagecreatefromstring(file_get_contents($QR)); 2 y7 j/ O3 S7 e, M+ C
- x# K7 U& ~5 O0 a! h. i- $Logo = imagecreatefromstring(file_get_contents($Logo));
G2 O2 D) H5 _ - , d* e2 @7 t$ U9 c5 K: q
- $QR_width = imagesx($QR); //二维码图片宽度4 b% \4 b0 o+ N' s6 a- y
- 0 K! I2 v( e4 b7 V8 K
- $QR_height = imagesy($QR); //二维码图片高度& \2 s; b a( I7 L8 ^! F5 M
- & Y- p. G1 @9 X
- $logo_width = imagesx($Logo); //logo图片宽度" W0 g) `2 j* M) @. c8 V4 w
! K: k4 _! J9 M! Z- $logo_height = imagesy($Logo); //logo图片高度
/ [/ @5 ?& H* \5 a' w8 |
5 b' _5 B9 J- S- $logo_qr_width = $QR_width / 5; - l$ z6 b4 T& Y; u( |' R: h% v
- ; v. h" @: q- ?4 K8 Z
- $scale = $logo_width / $logo_qr_width;
. j- X& ?# l" r - + |( v4 a2 ~( y. g3 d6 n) z) D4 B
- $logo_qr_height = $logo_height / $scale;
. g" L/ H& s0 j6 u# B
. B( Y ^. F' R: c0 @- $from_width = ($QR_width - $logo_qr_width) / 2;+ a7 e& A6 D% a2 v
- ( Z7 p, r$ {1 N7 ?, T
- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height); 1 u" z" }5 V8 F; z7 p2 z' K. j
- 1 m+ V* y& N4 V- h2 y; c
- //输出图片
! ~, Z. Z+ B& j. O1 a - $ F2 k" y' P9 t9 i4 I) {) x5 R
- imagepng($QR, $Logo_re);0 M% C: h9 D3 T: S
- ) j" |' t- s7 ?) F4 t% C( e
- }/ ]. _* n5 d0 D. v+ y7 w
- " K# A: |% N( L' s9 G" R, x
- 5 o. H9 Q8 w: q" }
复制代码 3、qrcode_vcard.php (生成电子签名)
: T, M! D% E3 K c& x3 M3 C! t' A; i- c
vCard格式:https://zh.wikipedia.org/wiki/VCard
! K2 Z A, K9 |9 X! b3 T, y e' H3 V9 M' @
- V5 f) O' T" [
- * Created by PhpStorm.' b8 O8 ^/ m, n _* D7 ]8 |- \' g, g
# H# j& C" l. _6 a4 _$ B- * User: user
: v9 E; M5 Q+ R$ \5 n
# n, d# F: N, j9 `/ Y0 w- * Date: 2018/8/15
1 r& c% n; R$ B- y9 y0 Z; L - 0 m' l* D4 Q- ?% T+ T
- * Time: 23:00
1 H+ U: D1 O* U- x5 L/ ?: W* ~
" q) g& U2 V0 C5 e- */require_once "./qrcode/phpqrcode.php";/**
0 J1 W4 b6 d+ A8 I - $ n7 _" w0 \1 P# s+ {( Z
- * 生成电子签名4 D6 n3 R2 X K+ O1 ~
$ V% ]( {0 f2 s# l. v% K- * PS;使用微信扫描二维码, p/ H, j" \. q' ?5 H& u: m& k
3 V2 K, J# J( n! g- */$content = 'BEGIN:VCARD' . "\n";//起始标志
' O1 y. @8 Z8 ~
. ?$ h4 O9 U& ]- $content .= 'VERSION:2.1' . "\n";//当前版本' i0 D% {$ p/ W/ s0 ]" J* k2 `
, D0 Z) L: K: H% o Q- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名/ @/ w: {5 t# Y4 d+ t6 Z2 |
- 9 z+ ?% i% e; i/ g! {& Z( d
- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称6 g9 K q p6 w8 r( s7 [1 T" N
- 8 ^# o" p4 X) `& b8 v
- $content .= 'TITLE:PHP研发程序员' . "\n";//职位
$ m) r! p3 k5 B - * A7 \+ Y6 R5 _. D
- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话; |% n- R: x( C
% U4 p0 m6 }( H0 S, [- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址
% W7 M4 ], H( G4 ^) L - 6 o% ^9 C' J) [
- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)9 N2 S1 W0 ?# O
5 f: D- i6 F6 @0 N6 q- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话# i! X( h' @4 M9 |( |* w
+ H2 U$ H1 S+ A* J- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱
7 \4 w3 h, o5 G" k6 R0 I9 m9 Y - 9 P% \; c' g1 f4 t, l3 W
- $content .= 'URL:www.baidu.com' . "\n";//个人主页# j- Z5 v. x4 D" e6 a
- 6 g* y$ C- W' V: n7 v% Y6 H1 |
- $content .= 'END:VCARD' . "\n";//结束标志
6 [9 H' q: e$ y, A - : o$ u4 H; t' z* C$ a& x
- QRcode::png($content);
, B7 s% P, `# g/ R
. g" M: r/ B: }" B2 m. i- 2 N) z [8 x( F1 n
复制代码 3 ^% _2 L8 X$ w+ h* e" C9 p; q/ H8 V
相关文章推荐:
, L c3 f0 q. h- R& C+ u3 G1.PHP生成微信二维码实例$ a$ y" e+ e9 n8 v Z% L6 ?
2.php网址转换生成二维码$ x2 e9 U X% Y
相关视频推荐:- }2 n6 h) t3 F ]
1.独孤九贱(4)_PHP视频教程
9 a ~( A, Z) k6 K二、JQUERY生成QR CODE
7 M+ w; O+ I w源码地址:https://github.com/jeromeetienne/jquery-qrcode9 O ` O4 c# X2 s+ c# q
# x' V q& d6 Q _( f* [jquery_create.php" Y: `6 Y0 J: t
0 ]! |( l$ y& t% ?% m5 ?& A- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码 - I1 \7 Z) t, P) |2 a4 d
三、PHP识别二维码
4 m' }( v6 I n( Y8 u1、方法一& u4 M4 p: r: x$ \& \8 `& u
环境需求,安装如下扩展
4 P; w$ N) S) k# r4 b" G* }- ImageMagick
n4 ~; n" }9 [# h; t/ q) a$ O- zbar
$ [4 |0 R7 [# P; o5 N) \- g- php-zbarcode7 c! f5 w' E9 b; D
2 k% Y. M8 S x! I0 d' P9 c2、方法二" R/ @$ ~. c2 A6 A6 h" [0 _
PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以
" \: w4 P; h2 j+ M8 M6 ~qrReader类:https://github.com/baagee/php_QrReader
5 m3 W: W X; x2 a$ V6 k& d. p% h0 y J& S& k# M
& y, N1 b! v+ J2 ^$ R; }- $qrcode = new QrReader('./test_logo.png'); //图片路径9 A7 R: J6 K% o( e
S3 t& y/ [' E, L4 F" A% N- $text = $qrcode->text(); //返回识别后的文本
$ X- V* X& `1 L: b4 N( t
1 d+ p) e3 I# j2 m9 c2 J% h- echo $text;8 F1 r$ W+ Q9 t
7 Q ?9 E$ F# p: ^0 `5 B1 f! T- ) Q8 j2 h i4 d6 B. R$ h
复制代码
' y) F9 O; W; p链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7! s3 p/ Z1 h* F P
; g# S. H* W& Y' U. ~ E6 E/ r y. R* D. Z7 {- S3 ^- p
3 b& e4 I1 y. c% R. S# a
+ \* x! S$ j; s. E1 C# j+ z: G* U9 C, C
. f. |7 j5 y, [' u8 G0 Z; K: Z U# s: W" {) x. h4 H" x
. r. d) y' l# G$ X
2 w$ M: E" |1 z0 y9 M |
|