管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
, a! v) ]3 x) w% I& l W! }. v---------------------------------------------------------------------------------------------------, s1 P' [$ u: i1 M
二维码的分类- A7 ]5 g8 D7 L# e0 x" I
线性堆叠式二维码 q& e/ k- `( a
0 E2 t: m7 b. J3 C4 c- Q% F6 M
矩阵式二维码4 q/ l3 e0 t/ M" r" b
5 t/ y! [1 G5 `: N( r
二维码的优缺点
& r- _$ I. n0 X: p% O, d: o优点% Q7 Y: ^0 T" j8 D2 q- R& ?
信息容量大
' Z9 T3 A W! e6 ]6 s2 z
7 ]# X) q* x4 ]: z% s' u/ n编码范围广( i- @+ m _. m" m9 u7 S2 \) V, F3 I
5 X' R6 |0 s0 u1 D8 h& j6 i3 K8 E
容错能力强
' t8 U* f, {- \
' q: U5 ]1 E" T# a译码可靠性高
# m' h0 h& l3 l- U5 n2 I" S/ K
7 Y9 p1 e U( p3 w) i: V" R可引入加密措施
2 j1 x$ J3 W. C, V3 h. v( X1 D9 x0 ?" G. C' h& E
成本低,易制作
( n3 a. h0 Y2 k: }" t J$ M" f& V4 w
缺点
4 D4 ^' t& P, l; m8 i# Z' j二维码技术成为手机病毒、钓鱼网站传播的新渠道
8 F1 S, D! f& ^( b W8 e" N. h: c
% E1 l$ D0 n$ D' I0 H信息泄密
1 V: Y% E4 Y1 _* c+ ~
- ?! C9 V/ n- Z: x目前流行的三大国际标准
6 M- C8 H' }! r, SPDF417:不支持中文 P$ P! O8 d% u5 |+ L, P' {$ Q
7 _/ M' H1 J$ Y! V7 [
DM:专利未公开,需支付专利费用1 p, G( f$ M( h
" } s |& [& d* C7 n0 \QR CODE:专利公开,支持中文' h+ J$ B7 h% ?; b
2 p3 q! @& G* H3 s! M1 ]+ c sQR CODE 纠错能力
+ K, I: j2 }! ~# e3 C6 fL级:约可纠错7%的数据码字6 D+ `! W$ Y& E/ E0 x3 ~) h5 Q$ T
5 ?2 U+ K; Q& q+ t
M级:约可纠错15%的数据码字7 J9 I1 ]0 B9 `, o) y$ F t
1 F7 j: f# l# R
Q级:约可纠错25%的数据码字
$ O. a) c" v, O% U+ u4 S, }* H/ o- Q
H级:约可纠错30%的数据码字
6 W2 j3 N- m5 ^+ M4 j4 {4 B y4 `) b1 [ o$ ?; Q1 L. l# `; a2 R- y
前提条件. r5 W2 O% ]# }, r
GD库3 @/ d* j- C! L% q l/ |
/ t6 x! {) j; s0 T g" E, Y9 H一、PHP生成QR CODE2 s; h+ |: h- {& M
官网:http://phpqrcode.sourceforge.net/
2 e# Y. ?5 U2 t i) b) Y; m3 t7 R3 F1 x
下载源码:https://github.com/endroid/qr-code
8 `5 x4 G( H5 }' _7 ~* I! U! A
+ g% R$ \9 p% s; t W; n/ u& h0 i& O7 e目录结构
$ S A* h( w& M! g% Z* z" X
, v6 d7 S/ w$ J/ `& p
5 k' O9 x# Z) \0 S; O5 t( c
1、qrcode_create.php
# T: d- \0 t7 s* z% F7 Wps:生成普通二维码
/ E5 |+ P* z1 ]# j( \- ; s5 m* P0 l1 V2 {) }1 q4 q5 I
- include_once "./qrcode/phpqrcode.php";/**! d& `2 J+ A) Y. W
- , |0 L) m Q0 J8 ]$ p
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径; s; f" H1 g/ W( J) A7 i' r
' m) h+ D- @4 H S- * 在浏览器上直接生成一个二维码(内容为abc)
% m8 w) a: Y7 n" n; s, T - * ~1 C2 c; ?! y, {6 z% u/ d
- */QRcode::png("abc");
0 ^! k7 [/ Q- d2 C! V' D5 M3 y; g: [ - ; o% ^5 n( F) u5 u. h
- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**
$ k' q3 i% Y# Q5 y- ?! |) t
! |, Z/ ~5 j' o ^ Y. w- * 生成文件到本地
( g! Q2 y% D+ B# M4 B4 G2 q
2 q0 M- L8 q* b0 F4 ?" ~5 Z) w. j- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)
/ H3 p2 o+ j( [
, b& e! q: I4 K- * PS:$saveandprint源码的p6参数做了修改' B5 _8 w* h2 u* ]* @1 n
5 @+ I! z9 P. N- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);
/ i8 `2 G2 o& m - : I' m6 T" `. g5 L- T0 W7 ^) O
' g! B9 B% ^4 @1 n
复制代码
: P0 n( B$ y# e. h# x. k$ V- b2、qrcode_logo.php% [6 [3 p8 U- {$ \6 P" f* K8 x) n
ps:生成带Logo的二维码- 7 ?" l( M, _ Z) j1 ?3 t9 s
- /*** }4 h O5 d. l- q; z, W) Z
/ i6 J. O$ [7 s) [* Z# O- * Created by PhpStorm.9 Q" ]3 y0 Y, O# I# f0 F
7 J! g$ W! n0 O' y$ y. b0 b- * User: user
Y4 J |' o8 s, A. G6 O% |0 w. S - 5 R9 D* S% Q O3 I4 R
- * Date: 2018/8/16
* ~+ N$ v( `4 v, ?7 y [& D5 E
; K+ Y7 _% S$ O" k: f" U" |- R- * Time: 10:43
. K/ A. e9 [+ h
( O) |" x% ^+ V5 }" @1 ~) x- */include "./qrcode/phpqrcode.php";$txt = "测试内容";
" E {8 G8 I/ e6 Y/ i7 G - 3 N& f; x2 O6 S8 Y& D) v
- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称
$ a3 z2 n+ r0 b/ O2 W0 R& q' {
$ j7 s3 |$ F# c# I- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是* R& o% l( }: Z0 e' Q( e6 e Y
; k V1 D" K1 i5 P o' u- $margin = 2;//边距2 P4 ~$ Z7 i+ F1 @# F3 N- {
/ Q1 b) l" ~/ @, W1 \6 W- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片
5 k- f+ w0 q( C1 G- {- U - 8 W( {) G* D5 o0 G4 W4 x
- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){
( g5 X6 K: i5 o+ u: G* v5 @ - " m, Z; H0 Y9 x' R( [- Q/ C$ m
- $QR = $picPathAndName; //已经生成的原始二维码图
, o) m: v. F) a' L5 S
% h# O( F9 N6 I' G- $Logo = './pic/logo.png'; 5 B' X! h. l1 U+ r5 f; I
- ; M/ c( ^ x( u9 Q
- $Logo_re = './pic/test_logo.png'; ' k& y! N! z3 t& ^; y1 H A
- ( c6 N. Z2 G- [1 M% u5 [
- $QR = imagecreatefromstring(file_get_contents($QR));
! w% \4 {2 Y; H# E
% k; o5 d* Y; K% `( R9 @5 Q8 E- $Logo = imagecreatefromstring(file_get_contents($Logo)); . n0 l; \( \3 I
- & t9 c7 P5 ]) M/ C: E0 X) }( b
- $QR_width = imagesx($QR); //二维码图片宽度
! i- `6 H+ z" z' E% N6 q - 2 s# V5 `( }$ }" |& @/ a* d
- $QR_height = imagesy($QR); //二维码图片高度: ?- e6 v6 W' X; g! A3 f6 X( V7 }
. j0 z( i: u7 y: t- q9 {- $logo_width = imagesx($Logo); //logo图片宽度9 e6 ?! F: e& q. t( [" K7 U% R- o
1 P4 k% t" _/ O. K) n+ V3 Q' R- $logo_height = imagesy($Logo); //logo图片高度4 g! A# \" b+ i7 R0 l; h0 M
7 q, C5 S4 \! v- $logo_qr_width = $QR_width / 5;
2 v% s# e% ?. Z
! a7 Y* N0 M: N- $scale = $logo_width / $logo_qr_width;
$ s* R1 T7 x: b$ y. O n p4 t
' R- J3 m, k$ Q' g- $logo_qr_height = $logo_height / $scale; 9 z$ z. |& |) S
, b1 H! a) D9 j- $from_width = ($QR_width - $logo_qr_width) / 2;
* \/ Y: y( y5 [ w- ^( y - % N; U, }) g$ t, ?- n' M7 A; T2 |
- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
7 I% u* a0 U) F
, _5 o1 m7 `; J- //输出图片' H: `5 m( Q7 ~: W/ p1 @6 n3 e
" h1 V: J2 ], s2 I2 ?$ w8 E5 f/ {- imagepng($QR, $Logo_re);% W1 y% l. `6 L: \
7 J, E6 j: Q- {- }' V1 x* b1 ^" K" ^6 e- j( J1 H
- & H6 x/ }# }! M4 C7 ?& u
- + ^( T: [5 J" A8 L) D! M
复制代码 3、qrcode_vcard.php (生成电子签名)
0 `" M4 C H2 X) y X9 k$ a/ D
) Z3 T9 b( G2 uvCard格式:https://zh.wikipedia.org/wiki/VCard
; d6 l) k) j8 h) Z! y( M+ A- z' P
. H6 {- i+ W! @ p/ A: n p- . z+ V: U! p5 L ?( V
- * Created by PhpStorm.
! {, d4 Q, V* r0 R; ^ - 7 d0 V u0 s7 m ~' w, g
- * User: user
" h U) W. m; c5 g, w4 }; s
. J1 d9 X0 M: y) d6 [- * Date: 2018/8/15
2 m8 M$ G+ I3 I3 |
) z5 L8 t4 ~0 U; a6 N0 M0 Y- O- * Time: 23:00
$ \: n) d {% I F$ z
& `$ E- `' M1 z2 o, v- */require_once "./qrcode/phpqrcode.php";/*** r: E. k/ |0 J9 H9 w* P: W& ^
7 m" E/ j2 s( T- * 生成电子签名
; C2 S# M+ h1 ]3 d! [6 j* Y; V* { - ! B, L! d$ N+ ?, e% [; t
- * PS;使用微信扫描二维码
* D$ f. D, x7 T- y( I2 R+ Q - * i& k. f- S$ \* m* s
- */$content = 'BEGIN:VCARD' . "\n";//起始标志
: l& d( I# P) ^9 U8 }4 v
4 ~1 G% U" k6 e4 `- $content .= 'VERSION:2.1' . "\n";//当前版本
! {. w. e4 g& Y1 c! R. s7 m - ' v5 q- e! u6 s+ I
- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名. _& \2 u0 Q1 x7 s4 M o- I
- a- S& L" j: o3 Z! \- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称
7 n* S- q& T. z6 n# q
9 Y0 B, u6 C$ Z4 w" h- $content .= 'TITLE:PHP研发程序员' . "\n";//职位0 Z6 I& m7 N( Z6 l2 S1 u
- 5 V" I$ u. a6 X: `5 T- Q
- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话
4 C1 @0 m5 l* I& l, g7 }5 m9 s5 ^: E - & i" {: X& y: ?1 ^$ o7 M
- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址
3 Q, V) H+ `, C) H5 k - % |! U. a" l8 R) N' }; F
- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)+ Z/ E; M4 w3 t3 Y" B, a
9 @0 H+ a5 w. {& X- `% Y- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话1 U/ w6 j: ^) _! @& u3 J6 |4 K
4 W+ f, D- G$ h- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱
/ H6 l; c, s1 O# C N1 M - ; G; i* N- q, ~# C) f
- $content .= 'URL:www.baidu.com' . "\n";//个人主页
- k* k. K; g" b8 q - & h7 F; j0 X4 W+ S
- $content .= 'END:VCARD' . "\n";//结束标志
+ {& I/ {4 p8 w G" g
& b$ V/ |- f4 Y8 [7 q% t0 |" ~- QRcode::png($content);
/ g. W* Q6 l. r6 z - * f% M7 w3 Q% |8 j+ H/ F
+ f( a- v- V1 k$ e
复制代码
: y6 {% D0 z" J/ c2 t; V- Q, J! t相关文章推荐:
4 }6 G1 [# q( S2 Z1.PHP生成微信二维码实例2 e# T% i8 l+ Z5 j# k4 ]+ {% L3 t# O
2.php网址转换生成二维码
; J8 ^; b) f/ Y+ {) {$ U$ L相关视频推荐:7 q9 U/ R6 j# B2 l0 M
1.独孤九贱(4)_PHP视频教程
* P1 ?# u5 S0 v1 }% V9 s; p二、JQUERY生成QR CODE
- C! T. x3 B6 {; F' J/ a: u源码地址:https://github.com/jeromeetienne/jquery-qrcode
- @+ u) R( M/ [% r9 ` D/ s& z) {8 k- ]+ D* J( d: v8 m
jquery_create.php, l! R8 g& C7 P' _6 I6 y
( e/ |( q8 V+ A' m- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码
( o" ?9 R }, R0 b三、PHP识别二维码, k* E- S) s9 ]+ K
1、方法一' n5 N! ~! O, l" ~8 f% a; B4 O8 U% p
环境需求,安装如下扩展
! x, V) p% f$ a! ]- Y- ImageMagick3 e1 Z: f$ Y5 I; r A
- zbar( |- D) R% p. e
- php-zbarcode
; @: f' w% U: ^, z5 k. y, g; _, n2 H; G8 B/ S; q% j$ h a
2、方法二
# f" u6 d( ]' M. Q5 S1 e3 wPHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以: Q9 j0 v; k" ~2 p- Y# E
qrReader类:https://github.com/baagee/php_QrReader
' G8 }& X, {8 E" P/ ]; `: M% i/ h) y- I0 B9 c t
2 n. ?+ X) O' R! r- c- $qrcode = new QrReader('./test_logo.png'); //图片路径: `' b% x; G2 Y, T. A8 R3 u% l
- 3 R+ {$ T( T1 q: d1 S
- $text = $qrcode->text(); //返回识别后的文本
1 p k( W3 d3 b& k& R
( ^* Q1 u4 E. n! y# L/ q- echo $text;
& \4 d. k+ |* G( R# s
% p/ \2 e4 [; y }2 Y* P- # C7 v: _/ ~* X
复制代码 4 \6 K% |; A- Y5 x: V$ ~
链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7
0 t. s4 G& F$ W# T. P
! x5 U/ J2 }0 v5 W0 X
/ B' |2 Z u( a/ ]8 m7 f: \( \' S2 d$ N6 a4 i
9 }2 h, T1 ], U7 \. f% j6 @" c. X
9 |" `' `2 o D. s& j* b
! D/ \% B) ?* d/ s I/ F- ]( e3 [
! y- ]; I6 f2 U) \5 _% S+ Z8 {! H0 I+ \7 P* M' e! G
|
|