管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。; s) ?( g7 x% I- W3 l4 t9 k2 A
---------------------------------------------------------------------------------------------------; g" B- V5 k! d
二维码的分类
+ Y! U* H% W: w) m. U( S+ X! g线性堆叠式二维码( z! D0 X" { i2 B+ T6 H
8 G- B' ]7 L& G7 @
矩阵式二维码, O+ S; e+ p* E$ x% ]
( O5 l8 {( D" J1 Z) Z二维码的优缺点4 o6 Q! @. e, ^, o2 T" R" h+ X
优点* z( Q/ r+ a% P: C" z
信息容量大6 t/ S% b/ v5 h% Q3 m9 f: z7 B+ J# _* j
, p( Q4 L: i! A" Z u1 {5 n编码范围广4 r& S% {. c( R
+ a% l! V( J# L/ p1 ~+ c
容错能力强2 j- \1 h( Y" A8 ?/ y* c3 t* f
- a. ~# v& t# a/ S/ a$ [% S5 t
译码可靠性高4 F7 q3 i( j8 C+ [: u' e
. T8 U/ d6 `$ @
可引入加密措施
, O O- t; R" O% S+ q; J7 \( _2 c. X5 J& d, v/ ]) ^8 p
成本低,易制作
# C. m- c) h9 O/ ^
) e% P+ D3 a" e缺点
3 Z' a( Q0 b( O/ {二维码技术成为手机病毒、钓鱼网站传播的新渠道/ M: B$ x6 u# v I: m4 q* \0 T
" @8 N# ?# d/ Q& T0 v- U2 y信息泄密
% w0 I3 q8 C8 D3 M1 h8 w
) s; [4 V( t' L5 k" e目前流行的三大国际标准+ f& H. Q6 b+ L* t1 s: O C) K; G
PDF417:不支持中文0 G, z* |1 Z8 V; S, X P G
0 b* U& i) z: H7 wDM:专利未公开,需支付专利费用3 p1 Y) d9 K5 [4 W/ |
+ I' L: h' G/ G `* A; k2 H$ H- uQR CODE:专利公开,支持中文
- @% y. Z& W- x2 o7 l5 Q" N! P4 U- C* }* x P
QR CODE 纠错能力
& Z5 r/ i4 L& L! G) T. ~L级:约可纠错7%的数据码字' G5 V' S @# _) F6 q
2 i7 Q9 e( J3 |4 f$ }M级:约可纠错15%的数据码字+ Q# V7 Q/ S, G3 ^, r' ]' d0 ^& X
- v/ |7 q$ c4 Q! v/ V/ ]Q级:约可纠错25%的数据码字
( I' z) i) R- _5 o4 ~( j
5 r z2 O$ i" f7 K' B% L) zH级:约可纠错30%的数据码字
* E- i& l$ d% X- }6 Q' r4 X3 @' [3 b8 G
前提条件1 n( n# Y, i6 g% k/ C
GD库. }+ @. d/ \: n! r7 O
2 j( r) ^: I" I: k, D5 `- ^1 f一、PHP生成QR CODE# U3 R! }: v: [, D7 U
官网:http://phpqrcode.sourceforge.net/7 q2 ^( ]% x4 k3 O+ w8 E- N
' c5 Q6 x R/ e: C7 a- x
下载源码:https://github.com/endroid/qr-code1 V! j% t0 b/ F" I2 k( ]0 A- \! L
( L: k( N; }6 T4 I1 N目录结构
$ c& }5 E" B3 \, ^, i
) w- _/ C9 k- ?
* d6 `# Q, [5 A# G& n1、qrcode_create.php
) W* P6 D q; [) x& Q; Lps:生成普通二维码
; s3 F" N9 E& ]: S$ p4 Y( C2 q- ; \& n) S) T' z0 Q; i* D
- include_once "./qrcode/phpqrcode.php";/**
6 G4 t& G3 |, [
# O: I# \: Y; o0 O- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径1 Y/ U# q9 o/ o- Z$ C2 c9 ?
- 8 N7 D6 @$ i0 ~4 Z- L+ O. X: v
- * 在浏览器上直接生成一个二维码(内容为abc)$ z/ M+ B h: X! b$ D$ c7 r5 P
- 3 N/ R% k) \: C1 T, F
- */QRcode::png("abc");; s" D+ G" v8 `* e- q
9 b; a7 ~+ Z w- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**$ v+ ?% \& {' {. e
, m. L% J. [) H% D6 B, |, d- * 生成文件到本地 f9 r' Y5 e0 z. s7 }2 T
- % d R4 q; ` j l8 K" H
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)8 p, @" x. F7 m* ]8 D
3 K2 `2 N z& \, O5 |- * PS:$saveandprint源码的p6参数做了修改% N3 a6 b! J6 ]1 _. F$ g; V, i1 |
- [" n; s. I4 `. h- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);- T6 C& f8 w8 N3 n# N# `
l0 d. p2 v% E2 B
) ~* p' C6 f3 \, |' o# W- [
复制代码
% C6 A- _3 S$ p: |4 M% }3 ?2、qrcode_logo.php
* A* g* X* f! Q$ cps:生成带Logo的二维码- 3 X3 G& A$ _1 ?1 J; L' c
- /**. Y' g6 J4 b5 U
1 q4 i, s& X( Z u! I* _2 i+ |8 r- * Created by PhpStorm.1 C0 ~) e5 i6 O# _8 m, T
- 5 }. u E# z# i0 C4 p6 R
- * User: user9 _. I6 e( G& m% w5 l! j
- 6 _/ G0 [; |# P4 ^& Q0 i3 ]# t/ |
- * Date: 2018/8/16
6 L- T) i* \4 O2 e7 c5 {2 P* _8 G
# H3 [) X1 j% Q: _/ l- * Time: 10:43+ c% L. q$ Z, ?
- 4 [1 l j4 L* `8 q: j: O5 k
- */include "./qrcode/phpqrcode.php";$txt = "测试内容";
* B2 y: l" w3 p4 i* Z9 Z" \ - . d+ X7 e, ^5 T8 ^6 }) R+ Y
- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称5 }8 ^5 j3 I2 g# X; ?' U
- 1 b/ @8 X) x0 ~4 `. v: ~, a1 R
- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是; L' K- S4 u) D9 y* L
- . g# S- ]) h. Q& w f$ s8 j
- $margin = 2;//边距% F! n/ z& |2 l% R4 h: h* `
- . O4 I! J* E* _3 ^4 N# [2 o
- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片' n7 N7 q# Z& f+ M: t
2 u+ X/ {7 H( U! q1 p- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){
$ J0 y! s: [. ?
" O4 |- B: h( W& |8 d' ?- $QR = $picPathAndName; //已经生成的原始二维码图) T M. S2 f+ s% @
. W' M0 A6 W% _1 a# l4 \- }- $Logo = './pic/logo.png'; - f4 ~. j; d2 \# |+ ]) m
- 7 r4 f! z' `9 ] H/ K9 ?1 o; @
- $Logo_re = './pic/test_logo.png';
2 c3 U5 k+ T+ h. ]6 ]8 o$ C
: i' m: I3 |3 k& a- $QR = imagecreatefromstring(file_get_contents($QR)); 1 d6 I0 v5 D( R/ J/ I5 g* v6 v
# ~& K: H" \! c, f1 I M. S- $Logo = imagecreatefromstring(file_get_contents($Logo)); , o: S& i' R$ Q A: d
: N* B: ?7 B- L3 k( A: z- $QR_width = imagesx($QR); //二维码图片宽度
* v; E" Q6 H# b6 @ - , O3 s6 U( q% o! ~1 b8 }; w; [5 j
- $QR_height = imagesy($QR); //二维码图片高度$ ~: s" Z; T2 I9 u" {7 q
- * Q, L8 L$ X5 T, t: n4 }: D8 i! f
- $logo_width = imagesx($Logo); //logo图片宽度+ o7 [ x6 S5 q
, F. _: S- H* [9 Y- $logo_height = imagesy($Logo); //logo图片高度4 O" ^1 w, G: e" l# X3 V
- - G. F Y5 U5 t0 L5 ?8 J+ S0 ^
- $logo_qr_width = $QR_width / 5; # S4 v; X7 g1 G0 T v
- ( h& y5 ]0 L. _. m3 V$ p& |1 n2 n
- $scale = $logo_width / $logo_qr_width;
; ]: J3 u; F E$ U8 A, Y
" {1 j2 x6 w3 H- $logo_qr_height = $logo_height / $scale;
- @# `7 u% h9 d0 P' Y, }' M: D: X
+ J S; Y( A; Z$ J7 D2 W @2 G( x8 v; P- $from_width = ($QR_width - $logo_qr_width) / 2;
, ?% \/ u! h) \/ Y. C4 X - T3 Y& p- I5 O( @: E! H
- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
/ T7 j0 O( R( b% g - 5 ]' _: [( s+ E
- //输出图片
$ W) F; ]0 u9 Y$ N8 H$ H
' _" j9 y2 r, S' S- imagepng($QR, $Logo_re);" P7 f; j+ J( X/ D9 C, w
* r, |! s# C2 J" y+ Q3 R( v- }. h) J7 P' l/ n8 W% N0 P" o9 E
/ `; o, X6 j8 |- 0 D* J+ y+ e0 Y: O" X* X
复制代码 3、qrcode_vcard.php (生成电子签名). o7 [" T$ Z9 H! e) J- ~$ S; D
/ H, v) `2 I8 [7 ^( h5 \3 m% wvCard格式:https://zh.wikipedia.org/wiki/VCard: A/ G8 v. @; B3 T8 \
7 }7 }" b6 w2 B; h3 n
9 C$ l8 C; M* z* o7 X0 b# W- * Created by PhpStorm. ]7 _6 H% c' Y" \; B" Y
- & ^# l! G3 Q0 \5 \0 l) A
- * User: user3 Q2 R% z' R) H( a' ^) r
- * K# j7 D" U3 z
- * Date: 2018/8/15: M+ I9 Q$ w% L) l1 d/ B
+ B3 j4 S2 |7 F& V5 T6 T- * Time: 23:00! ^2 d, [3 _) {. W
- + w+ _0 Z5 b' M
- */require_once "./qrcode/phpqrcode.php";/**. [2 H, I! |+ a c
- " d; e0 u: {5 H# C/ V* B
- * 生成电子签名
4 W p% \ {! w4 o8 a5 t
9 B& X X' O/ u; E/ ]0 E- * PS;使用微信扫描二维码 q- i1 g' i$ B, X. Z
7 |1 o, M( o' j6 n. a9 F9 o4 Q! D4 R- */$content = 'BEGIN:VCARD' . "\n";//起始标志/ x/ L+ l8 s2 g; C
- ( q$ M' } Q9 s, H
- $content .= 'VERSION:2.1' . "\n";//当前版本4 d0 \$ U1 d! I( g7 ]. ?: A( Q* [* H
7 P! b, B+ y* S7 h- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名
. p- ^( t7 N% ^ X0 T6 l7 A, A
# v! ^% U4 Y: {4 p" [! c1 M- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称6 ?/ }$ C' F2 e- |
* M$ e; {* p- n- $content .= 'TITLE:PHP研发程序员' . "\n";//职位$ D3 p) o: K/ m/ ^& w L( R: l
- ; L, a; F% N9 X' K ^; M
- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话( V( O: O" e2 M( f7 v/ T# g/ q" M
- 9 O; S* q" m, K" K) m# u
- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址2 j' Y4 ~: Q8 k( Z4 q
- + ]. Q8 `0 R& G' L+ v
- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)
8 y' I" m4 A: n3 H - . E/ P' a1 b: ?, g# |" Z
- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话
" I. j6 l9 u$ w# Y+ B
! B) ]2 M) m$ N6 f/ Q- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱
6 g# t3 y: e; s' d - ! ^5 G9 ~. p# ]4 F; N
- $content .= 'URL:www.baidu.com' . "\n";//个人主页
8 H E5 n. D7 S7 P& z! M- P
B, p4 [- m. p) P+ g5 f2 q- $content .= 'END:VCARD' . "\n";//结束标志
9 n& z+ J2 c# [+ P' v* _
0 T: Q, J% P/ Z$ y$ z- QRcode::png($content);
! s0 e$ h; \8 Y" Q6 M5 N4 H - $ h' z- B8 Z$ Q2 s; O( \
- & i7 a4 c+ M; p% t0 k1 d2 ^4 E% C& Q
复制代码 6 R6 _% Q6 s+ m$ ?& P9 {/ \
相关文章推荐:* k8 |; l; `4 ?! W
1.PHP生成微信二维码实例9 |; s# `% M8 M$ M& j
2.php网址转换生成二维码
' @3 l) E, `- Y6 n, n相关视频推荐:5 T5 a7 @8 b+ M% ]
1.独孤九贱(4)_PHP视频教程! i6 E; p2 q6 S0 ]: I
二、JQUERY生成QR CODE
6 a; t; |5 y. x& L7 B( q+ N源码地址:https://github.com/jeromeetienne/jquery-qrcode
# d! B, b: C6 f7 d* X
; g, ]. u: n2 J0 V9 U; Sjquery_create.php
4 ~# P2 |5 o$ \ F7 r- j+ p1 A. ~
- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码 2 n6 b: e* }/ d
三、PHP识别二维码; H7 l# B2 h3 d: ]( y7 M
1、方法一( j7 o7 r8 }$ }+ h! d( Z. B a2 \
环境需求,安装如下扩展# R! D! Y1 w+ h
- ImageMagick
8 c& m0 _2 u8 ` t0 Z2 U9 e- zbar+ e- r! e) D6 p1 \! Y
- php-zbarcode" m, S8 L* V4 |; A. J
/ M3 I" g1 K' n* ?4 g1 S2、方法二. Q. W. R# W6 {) U8 h2 z& Y; s+ |
PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以2 ~# M; ^% p( ]% r
qrReader类:https://github.com/baagee/php_QrReader
. d' [& X( Q1 k$ k4 ~' w6 U5 }1 Z! J8 \" W
* v- w8 E' L4 u6 p1 e* k/ R0 F- $qrcode = new QrReader('./test_logo.png'); //图片路径
( f; [8 \0 N, { ^) @ - - B& }& H/ t; f/ }; ?/ X6 L
- $text = $qrcode->text(); //返回识别后的文本
& H4 a' A5 y( X$ u
0 M. K2 A& u; i: E1 \- echo $text;
+ z8 \$ B" ]" a- d
& w8 t! u! i8 r/ f- ' @* g+ P& E0 Y& G
复制代码
M* t3 {( F( ^4 |& g链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7$ I- t$ `, L; B) p0 r' C, z
. w# @- y D- c, I
7 `. \2 r5 `2 u& B1 y3 G6 V
! \& P8 ] G2 r7 I' c1 w; t* o; W4 d7 }
5 V* v3 r- }2 I
z6 b/ j" e5 _
* @. r1 u( u2 h' r# f7 T6 t$ m" L' X+ ^0 S
; e" Q' n0 C6 M; \
|
|