管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
" o2 t; Y8 R9 A) ~---------------------------------------------------------------------------------------------------( u8 p) K! j, W' J3 Z) j+ U A
二维码的分类" g9 r3 H% z1 m' \
线性堆叠式二维码5 U: _# h* U' p2 P/ Z. W
1 Q8 c! C0 h- ]7 P, L1 E* w: U
矩阵式二维码1 n6 }- |, e- [( n
@/ K2 g0 [( K% k
二维码的优缺点6 X ? _/ [, {0 ]; K/ u7 F! G$ t# O
优点
0 z- F4 }! @2 D j! }信息容量大2 X. {3 t( \; C) M' j% |' b/ Q# F
. I- p+ m9 v- G$ g% U7 R* t
编码范围广
- H2 @4 S8 {& A V- b @/ J9 j" T- } {1 f) E' c. h1 y6 {
容错能力强% h, H: | \) H) t) L4 p
& Z0 s6 Q' C" W1 R译码可靠性高' t+ @ a2 ]2 Q' p
# H. s4 g% n) C* w
可引入加密措施
, l' Z5 _$ q1 N3 k# v. b2 z* e9 i! Z5 O9 B% `
成本低,易制作2 d4 v' s w, n5 A
9 e6 @5 i9 e' [1 w; h V# |4 K缺点
, Y, K, m: ]# w0 b二维码技术成为手机病毒、钓鱼网站传播的新渠道7 s, k- @. n7 l8 a
4 F( A) W" z5 l
信息泄密
: r n% ]' T1 \* M8 G: E& \' ]0 [
目前流行的三大国际标准* b& u7 x5 `3 ]9 _4 h) K( o
PDF417:不支持中文
8 V! l7 U O. F. J4 T( @1 U$ q4 N$ q9 L3 B1 H+ O; D6 {
DM:专利未公开,需支付专利费用
, L! ^$ R% b4 W, q0 A* ]% w
4 o9 }- p) c. A, B( @QR CODE:专利公开,支持中文
* T7 \6 l& H! S+ q: P' L7 G) a* h4 @+ X1 _) C
QR CODE 纠错能力7 i- Q6 G0 J0 k& ~
L级:约可纠错7%的数据码字
! W0 `* L& K; L* f, \
# u" Z1 ^2 Y7 k4 S sM级:约可纠错15%的数据码字
% g2 D* U( N$ G' u4 Q2 q+ \5 Q' M0 s. i4 a' q6 Q3 l
Q级:约可纠错25%的数据码字
5 P5 Q; l2 u0 C/ J
& u: Z" y, M, m p0 _H级:约可纠错30%的数据码字
( D3 x' J2 {+ Y0 n) B% ]0 `1 O3 R8 I' O4 b' ~+ `! \
前提条件8 q" @: W( u$ k( K/ u$ e# s5 _ n
GD库
! L5 W8 t3 A' K8 W3 l1 R1 @ n Y% T) A, m
一、PHP生成QR CODE
( x& {7 z. E) D官网:http://phpqrcode.sourceforge.net/7 z. Y2 O, |6 Q: `$ o% a' `! p
! ]7 ?8 t6 Y5 j" O2 `' S
下载源码:https://github.com/endroid/qr-code
1 Y) X8 q, ]0 ?. w( S8 J% p& k8 |7 G z j" Q8 c# T. a% G* \) x
目录结构 a$ H) F3 T8 C$ D0 V
P2 B' w3 h7 p# J/ j0 E. d: \
1 f! ~! c) `% W! v1、qrcode_create.php$ H; `" f7 r& b* T* _, ^
ps:生成普通二维码$ o+ N5 d( U7 K" }& T0 S; A7 f: ~
- 2 k- z: E; s, Q7 z4 S: y/ B" z
- include_once "./qrcode/phpqrcode.php";/**
0 \3 _! g; {% j' F
2 U7 o1 B* H6 a! |( b) l3 ]. Z- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径
1 V2 W7 I0 F/ O) } s; ] - - r1 y3 ~& @5 k& E
- * 在浏览器上直接生成一个二维码(内容为abc)$ _5 p4 t0 t& ~
. W; {5 w. b' i# J! Z$ E- */QRcode::png("abc");
% G( H" I- G* L+ b9 f; J
! u9 K" r0 e6 D j- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**0 { s* P! }6 o- A9 \
$ B ~6 f, S. g9 J: H/ \7 d& Y- * 生成文件到本地# u& _; Y4 P6 q% `; x( E
- , |; _0 h1 n: l7 A; E( S
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)
) [ u9 f V$ m: G4 ^! y
! Y( N. s ^+ l. R' ^1 P `+ D- * PS:$saveandprint源码的p6参数做了修改% B8 A) ]2 a* [$ X7 q) i4 \1 J/ P
0 w) D& c) [& C9 y/ F0 O) @& L- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);* Q% q: c5 Q$ B
2 X% s. [# n0 `, ~4 K5 }
+ |+ q4 \& M5 X) S2 [
复制代码 ( m. b4 y1 P; A7 [& g% g8 X
2、qrcode_logo.php
. K2 V& o% a6 N; wps:生成带Logo的二维码- 8 d, {; N, {1 i- P' l1 V
- /**
3 z) d+ {6 ~5 N
$ ^4 c* z" d2 r- * Created by PhpStorm.
8 e# {* Z* X; z' R. q7 U - ) w' a, a& ?9 q$ G. d% w
- * User: user
`+ M5 D3 Z0 s - / t' B. n Y. H2 O, y
- * Date: 2018/8/16
( Q" C) o, u2 q2 {, S+ M- `& {0 \4 L - : X% o( r+ Q+ i8 V; T
- * Time: 10:43
1 {' ]- e6 }1 m, a7 {
/ \+ o0 G! w0 A8 l- */include "./qrcode/phpqrcode.php";$txt = "测试内容";
+ s$ j) d8 F, n* X8 W
# L8 _; }" I7 r9 K+ A" u, \% c- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称1 p; j" a3 n. O% r i. ]* }+ T
- F6 U/ I0 l; S( j- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是
' Y) f8 B2 G" t& r
' w5 g3 a6 c& @4 \* L8 z1 P- $margin = 2;//边距. u' M: ? c, _( s' v# n( E8 P
+ t. m" u+ e6 ~: j" ] t- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片
% t( S7 N v" S' F1 b
) v/ g# W% P) ]: {; M- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){ ! V2 C% O% H r$ H' P
- 4 y& W& _* j! ~$ Z
- $QR = $picPathAndName; //已经生成的原始二维码图4 x% ?# ^) \/ g6 T; i. f2 u0 u. B
- * z% u" e Q6 T/ N, L) ~
- $Logo = './pic/logo.png';
7 `: w4 K: r# o
1 _) y% \3 a7 \/ n- $Logo_re = './pic/test_logo.png';
[. R$ R' k6 F* R5 b
! r% ]4 r) `3 Q' j' L+ J- $QR = imagecreatefromstring(file_get_contents($QR)); # K- I# S6 ?1 a) T. _ w, [
- : d! k3 D: k8 P1 z6 j
- $Logo = imagecreatefromstring(file_get_contents($Logo));
( p& t2 v- Z' A$ {( a$ F- _) {
, x' t' y% J1 s6 p% m! w I- $QR_width = imagesx($QR); //二维码图片宽度
' D/ ~) O2 \: e: i1 `. E
% A7 I7 M4 U d: `( v6 q- $QR_height = imagesy($QR); //二维码图片高度
. ~( s& J6 x# K( ? - " |- _5 [+ x8 _+ ~9 t
- $logo_width = imagesx($Logo); //logo图片宽度/ F" U, P! @5 v0 H. x+ R
" _ d2 Q: A4 B% d, \2 k% L+ a- $logo_height = imagesy($Logo); //logo图片高度
7 t2 ~- W0 ~/ N - + n- {% f- J4 Q( P9 o) K, |2 B
- $logo_qr_width = $QR_width / 5; % X, U8 B5 G) {4 {- b- l; \
, z" U9 P: j6 ?- $scale = $logo_width / $logo_qr_width;
, T* Y* K; B* K1 p0 B* t: T
/ `- A' f8 {4 e B& p t- $logo_qr_height = $logo_height / $scale; / i$ F* w5 z: @; [
- 2 Q0 L; X. ?* Z, a9 w7 a
- $from_width = ($QR_width - $logo_qr_width) / 2;2 `' ?) I# }7 m
* j" ~( _5 V8 m% i3 k+ x- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height); ! ~, `2 C# E% ` {$ M+ |* a5 `" H
7 J2 n6 A& n7 X) s- //输出图片& H. }( j( f- i2 D! o; B
~( s* E+ x m, J4 u: |1 m+ I- imagepng($QR, $Logo_re);
8 T9 o+ Z. {+ m# t& C - X0 k h# M; t5 Q
- }
/ b2 L7 @2 @# ^ - " V6 R- d3 r1 l* o
- , D5 M9 [" F% f7 I7 K
复制代码 3、qrcode_vcard.php (生成电子签名)
- ]% w( j& x- O: D' r- K& H5 Z* U
vCard格式:https://zh.wikipedia.org/wiki/VCard `. l, e$ Q' m% h1 `
J. J; G) ^$ L3 r* {3 _
- * Z, I+ q9 W' K4 _7 p
- * Created by PhpStorm.% l# P8 ?8 h6 R
5 Q# S8 I2 r1 s( q8 Z8 V( C* x- * User: user
% E- V* l0 b2 [1 R* L' U; [$ c - : \0 k$ s" x# P( ]
- * Date: 2018/8/15" F1 J" A, V" P8 g, F* V
. ?* l0 O# S7 k: Q- I% Q/ T- * Time: 23:00- o* [ i: B- `
- 5 ^5 }5 x) n `1 g& T8 X+ G
- */require_once "./qrcode/phpqrcode.php";/**
& Z7 b& @4 g7 `% f- r r) R
# V! T, v- u& r8 Y2 j) s. J- * 生成电子签名
4 @/ _- q* M! F2 x9 Y" V; P" M- M
, [: M( Q$ \+ x8 F; @7 J W- * PS;使用微信扫描二维码- y( i& Q5 C( Z' D* S; l" }
3 [% Z3 q, ~+ `/ j' J! b6 @- */$content = 'BEGIN:VCARD' . "\n";//起始标志
6 m& R( _* ?5 a/ p c+ T, \* E
) q. Z* v e( a0 U: c6 T8 ]" T- $content .= 'VERSION:2.1' . "\n";//当前版本- m6 {. Z2 x U, g* h. a% A5 s" @6 b
- 6 n* ^/ i9 V: P# }0 W
- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名9 x1 I9 v2 }' L* c) y
- $ \% }0 Q0 m8 h# m$ C
- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称
/ @ |5 ^# y# z* S& E$ g- w% X - ) x c# t! l* o: P# L( u! V/ E
- $content .= 'TITLE:PHP研发程序员' . "\n";//职位, I A3 V. o' d+ p) o
+ q3 k8 k% \/ i- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话) d |2 F3 K* P7 U
; e3 U0 b/ A& W2 A* g- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址3 P9 N" e1 y+ s- K
1 ?$ d9 f2 X8 P/ Y% t- Q- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)
( Z; U! q/ ~; ~# C( e# o4 b, ` - 3 S' c& D# q2 z F$ {& j4 P2 z1 v
- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话
+ ^: a5 B; o, H0 @: ~6 m - 3 t4 p% z: c& v- {! v9 b
- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱
3 P) l$ N- |- @3 P4 n - % m% d5 ]! Q, g. r
- $content .= 'URL:www.baidu.com' . "\n";//个人主页
, l# U/ N2 k9 A! D9 B$ ] - 0 x+ Q8 k, x: S- S/ Q- G
- $content .= 'END:VCARD' . "\n";//结束标志
" Y2 E* Z8 s) ~+ q - 3 P. r2 ?5 L0 q8 M1 s
- QRcode::png($content);
- t. [0 q) K2 j6 u6 A. E - 7 M6 d, s* t# @. v8 j. s
/ M- v9 w9 |7 {
复制代码 + r7 w. V0 o: t3 Z
相关文章推荐:
" q4 q) X( j9 M: ~1.PHP生成微信二维码实例8 L0 f! a" B4 V. |. I& j
2.php网址转换生成二维码
4 u+ d) F! E. l L* k相关视频推荐:% \% I! `; O, B; y3 U# T+ H
1.独孤九贱(4)_PHP视频教程
# E" F! V! O. D+ ~# w二、JQUERY生成QR CODE
2 N' U; T; G* r' a: Q0 I5 k源码地址:https://github.com/jeromeetienne/jquery-qrcode
+ w/ J" m- O K4 T) I) |2 n' k# m+ \: e) K- t
jquery_create.php8 E* t& z; W1 e6 y8 A! Y% z+ t
, n8 @7 z" N& D! O$ ~4 g
- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码 9 @' d7 x b+ l2 z
三、PHP识别二维码
% v C! g7 `8 n/ u1、方法一
! }3 |; i" ^* ?! b# K环境需求,安装如下扩展
/ ] H+ l6 B' E- ImageMagick0 Q+ W+ U1 l" H- F- v7 d8 n
- zbar2 y" E! D) E0 d2 ]# m" L2 Y5 ~
- php-zbarcode1 U6 ~3 m" T* D/ O
' [9 T6 m6 B5 ^. _$ ^: C2 d$ ?2 T2、方法二
, u% I5 p' a3 ^. h, |3 OPHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以
( Q0 Z- H8 p$ L& Q8 b* s9 wqrReader类:https://github.com/baagee/php_QrReader$ I7 X, Z. E0 Y e1 L+ L
# e/ C: |; W0 f; B9 G- @* r
- ! D% b( d( C( l; A
- $qrcode = new QrReader('./test_logo.png'); //图片路径
1 C1 P4 Y5 Q% W: w# H f. v( v3 S9 k - 6 r! D2 T/ q& C- D# A7 H
- $text = $qrcode->text(); //返回识别后的文本1 n& `4 Y+ `. Y, u+ N6 V
- " b3 l7 H5 T, O( q0 Q
- echo $text;
2 Y" u9 s# g' i5 I8 ]& Y
/ ?9 ~7 {4 I" L% ?( x0 m- O- . v6 k' s$ K/ h
复制代码 ; a U, U/ ^; y: U" G
链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7
: W6 d7 }5 h# E
' J% ]- O- u S3 ^9 D9 z* V6 r& w7 o6 w6 W1 j
9 m( n l: @* W5 J* V
5 ]( b1 v1 h& {1 x3 H9 @3 `* `9 e
7 T: l1 J1 V5 y4 F5 m
3 }' |5 f+ {3 v8 O# I8 e4 [
: w. k3 j ~. @5 p% J3 c# B8 l' M/ x- n. `- g( [4 v
|
|