管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。) X1 R% D. \; [. U# l4 L$ V
---------------------------------------------------------------------------------------------------# B7 j) W: ^& A* |4 H
二维码的分类
/ u! g8 ], T9 T7 D* L' I, V线性堆叠式二维码+ N, |+ I8 V0 S( a# r* [
2 I7 n) X2 ~8 k7 Z$ D# p
矩阵式二维码3 o# S) L% }2 B
1 m1 J9 w% x G# [二维码的优缺点
1 w8 W% F2 d, t, }优点 B: `. Q/ Z; j: Z
信息容量大
0 k9 }4 n0 I8 {; N' ?4 E5 l: Z9 L1 D3 k3 D
编码范围广
0 J! w& [9 ?+ _* d# M6 N( g
% k* d' t* \% m; N容错能力强
" Y4 @+ I8 i _5 _. m- P: R1 R1 q% v' [1 u* J
译码可靠性高
1 Y' G* a# n0 O" g+ _4 S0 \. @' p( H. x* N, ?+ Q) z7 a
可引入加密措施
' m: _, u' I4 @! s4 X
8 M/ b- H$ F3 l/ y6 S; T2 K( h成本低,易制作, B) t$ m* T- ~& v9 R% }
+ C6 j; W) z4 X. ]
缺点
5 ?8 b4 Z U ^; F+ o二维码技术成为手机病毒、钓鱼网站传播的新渠道
$ I1 L' X- ^# I) m( s! S0 t' F# r, m( p/ w3 N z9 a2 R
信息泄密: P9 a; F4 I; l5 X1 R" Y7 N
4 p; W! f! P* U* a; n4 ~0 @
目前流行的三大国际标准0 X1 E9 O& |5 C2 c ]8 N
PDF417:不支持中文! v; U m5 D! g+ V, v4 P& ^
( `7 }9 `. ~5 G
DM:专利未公开,需支付专利费用
. N% n* z. b& u: W8 \
* c1 H4 s& _3 M8 _& qQR CODE:专利公开,支持中文
9 i, B4 @0 W7 T( Z/ m, e, x1 g; f
$ Z6 T" i& ^5 i! A I: l- FQR CODE 纠错能力, p: ]- r6 C' |$ w: O2 E( I- t
L级:约可纠错7%的数据码字) f' K) S/ G N" [. |6 j4 u: U
' [+ m" x* P) R" S: l5 |M级:约可纠错15%的数据码字
2 f% S0 ~; L' v. c0 m; i0 H1 N5 F0 y# y) ]1 b
Q级:约可纠错25%的数据码字
; |: {; s; ~9 K( B: V8 ]4 O5 w6 t( _$ p, o/ g
H级:约可纠错30%的数据码字
3 n% }# \! |0 A' x8 T+ J* Y
, ~2 _2 B3 g& x0 o% J前提条件# R+ T" N5 c# H+ s) {
GD库5 ~0 o3 F8 h/ o# X# g- l# e! t
; O+ r% S ^# w- U3 Y, Q一、PHP生成QR CODE$ U% c7 |. @4 u' T
官网:http://phpqrcode.sourceforge.net/
$ Y& U) ~' y/ d
1 u) s S: @6 ]& H( B. J下载源码:https://github.com/endroid/qr-code
3 X7 S! ]) c2 f9 E
, e& X" {* a3 R: \# [/ O目录结构
8 B6 g& Z5 O. Z9 K
, }' G/ r p2 R6 l2 J- x' c8 y$ w3 X: Y. ]3 A; ~
1、qrcode_create.php- I5 _ E- t5 {( D0 {& P% ]
ps:生成普通二维码' @* v, W0 u5 ?% P; @8 V+ U
- 6 \ P+ o4 {% u8 h
- include_once "./qrcode/phpqrcode.php";/**
2 z% L, e' ]; a: U7 d
8 w1 ?( Z+ M* g6 W5 Z0 G3 y; X7 c& Q- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径
2 N4 @0 T8 h; S - . w) D0 u# h) n
- * 在浏览器上直接生成一个二维码(内容为abc)
/ S0 V9 w1 c6 \3 o# s$ Y
4 J* S/ ]- C9 G% F7 \- */QRcode::png("abc");
, S# b- }$ p7 t
7 x6 g3 A: L( m7 R- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**
+ v+ ]/ e! i, r- o! V1 A7 J8 r" c
& \& h8 Z/ L) L5 _' Z$ H0 g- * 生成文件到本地9 g, P& g, w! x) h) v* I" G# L
- 2 _. l) W, L2 l1 n" v9 ]# v ^
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)
" x2 r! Q. t( {4 ]; t
: q, \ e$ u. v7 Y! \- * PS:$saveandprint源码的p6参数做了修改
) L8 `' @5 R5 z& Z
9 R. b* Q5 x$ ^5 A# p& @- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);
2 w M/ ^* V" O. s' W: R/ I9 g - 6 |/ U5 I1 f3 C; y9 m D
- # L% Y: `, A3 z& L
复制代码
$ n2 e1 f7 O+ l1 Y e2、qrcode_logo.php
3 V0 @3 h1 O$ ^7 P/ @ps:生成带Logo的二维码- ! r6 A; h7 X9 }( j4 ^
- /*** J( i# {+ ~# S: \2 L( Y
6 k2 v$ I9 ^. V4 B- * Created by PhpStorm.. I6 ]9 z, m; J% ^8 E+ x
- ! n! m/ ^8 g. j/ J
- * User: user
( d+ d' f. g8 s: ~
7 W3 x# ]6 K3 `' n- * Date: 2018/8/16
0 m7 V8 C* b! {7 [( }
6 `) z& V& S3 T- * Time: 10:43& e6 I- T* E% x+ ^" `9 I
1 e6 I* K3 I% Y1 C8 l5 A, C- */include "./qrcode/phpqrcode.php";$txt = "测试内容";' P! t0 W2 @% H" i. B
+ ?: k% S( F) G) t- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称
1 T6 H7 y2 j2 I9 A% i- u7 b6 G - 2 l1 s8 @' c0 @2 a
- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是
8 r- \! h, g# _2 z
- H$ T& `7 h0 Y$ Y* I7 h: N( T- $margin = 2;//边距* m6 _* v/ D0 t! [. W
6 @6 `0 F' w, D8 v% K4 `- ?- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片
8 B G8 x) d7 L/ Z& |' s - . }. P, b* e: d. c) d6 a! U
- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){
9 M; G# n5 n; M4 s
7 C4 T7 v# v$ w# V4 n2 C- $QR = $picPathAndName; //已经生成的原始二维码图- O7 Q$ v$ v6 g, @/ s
- : f+ n1 c6 o* N* ?
- $Logo = './pic/logo.png'; ! _8 t. a6 f5 Z; `: B4 V9 b4 P: @
- " r4 M; B+ ~! k F7 y1 K0 [7 w
- $Logo_re = './pic/test_logo.png';
, u% v2 c& \. P: t# v* K+ |: B
7 u; J: r4 v' I' p7 G- $QR = imagecreatefromstring(file_get_contents($QR));
, j. a; m3 f6 { - ' T# y6 G7 v* ]$ l; X! x, c% n
- $Logo = imagecreatefromstring(file_get_contents($Logo)); 2 Z: w$ k8 o$ ?" @' x! B& O* O' s
# j0 o+ J" |1 e& s7 X- C- $QR_width = imagesx($QR); //二维码图片宽度
! b! s: v9 p4 x2 P- F. O - / |' y. B1 G7 A) v
- $QR_height = imagesy($QR); //二维码图片高度
4 _8 Y, A6 Q/ j( T/ t( [/ U7 ^ - 8 }* e/ f" @' K) d+ y% i) c( Y
- $logo_width = imagesx($Logo); //logo图片宽度
8 r6 N8 C6 T- j - 4 ^ y$ }- l% }* N3 m3 y) f5 z
- $logo_height = imagesy($Logo); //logo图片高度
6 b# s; _) p6 @0 R9 B
! a$ t1 X9 Q7 {% `) A; C R4 {- $logo_qr_width = $QR_width / 5;
, b! n+ ]$ L2 O3 ^
" \0 C1 x5 @# @- $scale = $logo_width / $logo_qr_width;
! l ^5 M, x5 ~% _ - ! a& U. c& y8 _ ~! Q; p4 h
- $logo_qr_height = $logo_height / $scale; / F- v5 }2 W, m
- ( ?1 ~- y' X5 g2 a
- $from_width = ($QR_width - $logo_qr_width) / 2;' U- ]# R: C& b, l% K
- 0 ?, M2 b" a N
- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
9 G+ I" [- A" W% D& `$ g! q! x6 i
+ c5 [& k) @# _4 k) f% m3 \2 u! M- //输出图片
' R' l8 }. M$ W - ' h, h2 v# k+ u, \2 M) n
- imagepng($QR, $Logo_re);
U+ Y5 i0 p7 k; _
" z* o& f' ^" Q, g- f- }) d! {3 z: J5 b+ n$ T# ?4 x
- ' `* `6 [- N+ ]5 J
- 6 U. Q @, |; m0 w
复制代码 3、qrcode_vcard.php (生成电子签名). u+ i0 ]6 \3 v
& y/ S, G- r5 s" e; W" _9 G! S' K* V) c4 kvCard格式:https://zh.wikipedia.org/wiki/VCard
( x4 g) _$ P( ^3 y! O v$ Y& m! m: W, r6 U ]8 s9 q" b/ y
- 8 Z+ `8 [) X2 X4 t( o' f) D0 d/ R: Y
- * Created by PhpStorm.2 \! v8 E' K# i$ h4 [( t) J; V7 W+ h
6 y; D6 f; ^- U! G# K3 @- * User: user! U$ C2 R0 s- d* q
# \% V# ^/ q* Q( d4 ^& k; ?+ i- * Date: 2018/8/15" [! f- {. t) N8 O; I) y
8 `9 l" B! W, q9 x* w- * Time: 23:00
8 z* U' u! u% v$ L* v4 H4 o5 M3 w
% W; z# s2 t' \; ?- */require_once "./qrcode/phpqrcode.php";/**: p& E F) _" h! E* F0 C( H
5 H d# e/ T" ~& O. v- * 生成电子签名
; u' |6 b* `1 A5 r: ~8 I# n& J
0 ~# x4 x/ ~3 }, d' C1 G2 l- * PS;使用微信扫描二维码$ D. ]2 L2 Z+ G. V- e9 o' c
- b# W7 s! e, w2 B& L9 Z, _6 |, s! t
- */$content = 'BEGIN:VCARD' . "\n";//起始标志5 O8 E }! h: W/ R4 e: ?; F+ f
* @$ u+ C& h9 i( G: @- $content .= 'VERSION:2.1' . "\n";//当前版本
. f# Y7 [& ~9 ?' v7 Y ?/ }
/ T" b6 `+ j6 x& s* V- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名
8 e! o7 w9 X- v5 |/ O$ t4 P% B- U9 J - & Q( D. q: ]6 G$ i7 m3 {! y
- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称
2 S# n% Z) c7 N$ f, @6 v9 C - 6 k5 i' [. X2 E( ], R
- $content .= 'TITLE:PHP研发程序员' . "\n";//职位7 f$ J L# [. u* s _0 V6 X/ E
- ) {" `& J- {! ~$ }6 s
- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话
Q( a# j( U! j9 x' P, A9 A
6 _7 S' g' R! B- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址5 W% x- d4 Y+ W8 s
- % X% y- V3 |/ u; [) {5 Q+ v7 a2 o
- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家): v8 S/ O3 o t" C/ C' U
- $ g/ Y# M! J/ l3 P6 R
- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话
" Z# Y) y; M" \: l( p" V3 n/ }
5 d; l# f$ a2 s) N- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱# Z' g" W2 q8 c# w# h$ _
- & I( m7 i' ~9 {: \ a
- $content .= 'URL:www.baidu.com' . "\n";//个人主页
7 X4 X2 F8 x: S% t9 K6 _ - ; g/ \1 m( S& z( w
- $content .= 'END:VCARD' . "\n";//结束标志, G, G5 i; n3 z% K; k# \
1 @; j- D8 F2 s/ D+ A* o$ z& p9 ~- QRcode::png($content);
" i8 u6 A$ S% ]2 D, D9 e% b- k, S( D - : n9 F$ N' Z& Y- b
9 F' [3 D G; s& L3 m9 b8 C
复制代码
' A* }$ p8 C# W! F* m$ @相关文章推荐:- l3 P1 R4 [) x! E7 X" m1 T+ n, B
1.PHP生成微信二维码实例6 d' Z9 n( S) d! R( C3 c# m P: w$ ?
2.php网址转换生成二维码 _2 \) h8 e; E- B8 n& Q$ L
相关视频推荐:
1 y7 t" }5 @( p1.独孤九贱(4)_PHP视频教程3 B) f8 f; L, P% g6 V5 O- k
二、JQUERY生成QR CODE
4 q& o/ ], E# C) s' }8 R% x源码地址:https://github.com/jeromeetienne/jquery-qrcode
" O* c9 c+ h, |/ n8 F# V( |
4 ~2 D5 }6 |) D7 P, T% _jquery_create.php
! l5 f4 O& ^5 Q4 ?6 J+ h0 \/ u# e9 G. {
- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码 # f8 ^7 u9 ]; s
三、PHP识别二维码
" X) Y9 y" J% ^+ }5 g; e- r8 D% q0 b1、方法一( H2 O Y# E% r. X9 ?+ g! R1 B# A
环境需求,安装如下扩展1 h# g k! I% D' T
- ImageMagick
1 N) H3 e0 b3 G: }: O- zbar8 A& z4 Q+ Z% T. s0 q4 N
- php-zbarcode" }: ~" |6 h% t' C
# F1 @: r* _5 r0 P( n4 C2、方法二 n, V2 P% ^' C/ u. h
PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以
% m, c E# B* H8 M. f6 L1 LqrReader类:https://github.com/baagee/php_QrReader4 U. S. l& r' ? t
& N0 J* m& n% I6 {
$ k0 `8 [ T2 H2 W& U+ y2 W- $qrcode = new QrReader('./test_logo.png'); //图片路径
$ M; `9 @, I5 Y - & d% O% y7 q) ]( W3 a5 p# ]! l9 n8 Z
- $text = $qrcode->text(); //返回识别后的文本: Z# q# k: n! e1 S
9 `* x; h6 G: Z! x* T- echo $text;* M& }8 v, h4 `* e$ U
7 p; o$ m; @& E- / E$ d. g, _5 i A
复制代码
4 y2 `2 B: g5 e) C5 K链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7
' y) { F: g0 d N
, n) Z/ G. R' B8 n; g
; u* r6 ~- f2 e8 m% ~$ j% R. p4 w" @* T6 T/ S, c
5 _: |$ |' S8 O$ D2 n" f$ R% `& u% W: t n% f
+ S! S `/ `+ F9 H0 [8 ~) |
1 r9 c8 X/ \3 r" r$ [% b1 w W* w7 T3 g% m% n
5 k- A, h6 M% b5 E/ B1 S |
|