管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
6 j: o; Z4 Y* O* r---------------------------------------------------------------------------------------------------- ?" j9 |. M: z( _0 A: ]$ i, o" L3 v# U
二维码的分类" M+ x0 \( L7 u4 S$ a8 s
线性堆叠式二维码4 x! a, y$ p1 |) a) }
0 d( Y8 u9 W. q. r& {# O
矩阵式二维码- w: a% c y( U6 n$ V4 Q
7 p! d, I# \' m二维码的优缺点
% H5 ~% q" ~1 r# {( X% L' ?; H优点
/ f. L+ \* d+ K9 ?8 W2 [/ G" Y% W0 w信息容量大) Z1 h! M- E2 ^5 l; x
; P7 f% w7 h0 v# c% {' X编码范围广
: Z' D6 T5 u6 u% a5 Z: w& F
- {+ ?$ K; A+ V- [容错能力强, k i% P, }/ z- u% c" S2 m1 a
2 D8 _8 _; j' {6 r6 ` z& U译码可靠性高
9 t& R, S/ l9 t& D8 q' ~, X9 X7 y# F
6 k3 j7 e' ~/ i" ^可引入加密措施
+ k) |8 X& z* s! S
2 Q( [* I4 D! o4 `成本低,易制作" a s7 q8 i7 @( p0 I
0 b) N; @ @# Z+ t; }$ ]缺点
+ R9 o; |5 [* n0 w( w$ Z二维码技术成为手机病毒、钓鱼网站传播的新渠道
) n( j% ?$ O# j5 w( Z# z: K( f2 Y/ i( ^9 H
信息泄密. {7 q: g" S8 z. E0 ^
8 Q6 j1 G, F0 f7 Z, q目前流行的三大国际标准( H# i7 R2 X- y1 K( Z3 ^
PDF417:不支持中文
6 V6 S( s3 h% Q" I1 i& c0 ~( e5 A# q; M. T" P$ O
DM:专利未公开,需支付专利费用
5 W; d- w. A* V4 V4 b8 {2 V- X- V4 {4 n1 z* }* n
QR CODE:专利公开,支持中文
% x {, z/ O/ C) ~, C( g/ y; M! F+ a3 w5 r
QR CODE 纠错能力
, e8 W5 d9 l5 \L级:约可纠错7%的数据码字- l: f1 ^( @$ E+ x
3 i4 ]# T k3 w8 q; n. XM级:约可纠错15%的数据码字$ [+ G& `7 f$ b2 h: h) e; k
8 m3 _6 D+ N8 n8 o/ p# g- KQ级:约可纠错25%的数据码字, P# r2 u6 T0 i5 @" m6 K
" H! y* P, y/ m7 DH级:约可纠错30%的数据码字* r [# O6 W* B+ ]
9 L4 U* h. @2 q* x前提条件/ ^% s3 D7 q% q. c
GD库 p& O1 e) ]* S9 D
( ~. ^; d/ {! Z& w: k* X! ?' H一、PHP生成QR CODE
9 I9 t) V) I7 v9 w" i8 C官网:http://phpqrcode.sourceforge.net/
$ y3 i$ B( }. c
/ A0 \; M' Y5 @$ t X9 j下载源码:https://github.com/endroid/qr-code
& B Q$ G6 e3 l/ U# m7 Z5 a1 m0 ~( w+ d* w/ ^# ?' s( m+ x
目录结构
$ y2 u' ^0 Z: b+ E+ m7 e9 R! Q
" ]9 G( J; ^3 b) e; L
$ J- K/ C) }8 y7 K2 |1、qrcode_create.php
# q% k9 [) Y3 C9 U3 ips:生成普通二维码& Y, K1 N/ m8 f& T
- ) q! H; V: x% i: e+ g
- include_once "./qrcode/phpqrcode.php";/**
; f" r2 |' P0 | - # r( J" V& k8 s! B
- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径
' ^: ]. @ ^1 r1 t# T - + [# Z! R0 O% ], ]6 {8 O7 ?/ t
- * 在浏览器上直接生成一个二维码(内容为abc)* b& _0 J7 j/ h& [1 n9 f1 T+ w
- 4 V a1 k: ~9 X2 N, q# y. U. Y) K
- */QRcode::png("abc");3 ? l H( m( Z" D3 I [: h3 D
- - R8 K, p+ @) y, j9 l9 y* a
- QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**
- W3 p" _& m2 D8 |
9 a' P: \' T- G: ]9 y+ `- * 生成文件到本地6 E) A& l2 a7 |; B
& e6 a& s% V; A: ]) G/ c. |' u- B9 Z- * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)6 ~, n D. \9 b3 V4 n# \4 @# A' U
- ) H2 X; s9 b: P" U, @: S; O. S7 t; T
- * PS:$saveandprint源码的p6参数做了修改- Y- B- K# P. c) N
- ! r1 i" B/ l; ~
- */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);2 Y, m& T4 o# h
. l! @' x# {% X" j" ~
0 k" U3 E( r: a, d+ w3 E
复制代码
( v7 L5 f! M6 w$ h: Y8 b# F2、qrcode_logo.php
) U. ]6 ~- s/ H. z) I0 Yps:生成带Logo的二维码
z4 p O# s* Q4 }+ N1 V- /**0 ?' r7 _- Y( z4 Z$ Q
- 1 r& p# r7 i+ s; M/ e
- * Created by PhpStorm." Y+ w; K$ @+ a! ]! Q2 {3 ?
- 7 f9 \: g7 P/ `' Z3 c
- * User: user0 ~- h: S* R j" A2 {
* [5 m. T( A, D, u; a- * Date: 2018/8/16
7 p& c7 c) [0 w/ k7 B U( q - ' R+ [0 C$ H6 i, q u1 y8 T
- * Time: 10:43+ R+ F! ~0 }' T( v3 |: I
- 0 N! z% j% ]5 Q f9 M4 g/ Q
- */include "./qrcode/phpqrcode.php";$txt = "测试内容";% X$ q- G; O8 n; r p6 a
- ) Z4 S5 @ K; Y
- $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称' s- m9 I+ u% Q3 f2 M
1 w2 o# P- `/ U" _. Y1 C- $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是
J u8 G1 Y. i3 | - $ M. {0 Q+ k) u$ U9 d) L, r6 }/ U
- $margin = 2;//边距/ w H$ m% D. }4 O; Q v
- " c- V0 \+ O$ X3 f* a2 W1 ]3 N
- $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片: u' d* T7 f8 F0 W, n3 c8 Z
# H1 R: C) g$ u/ ]! h4 o4 S- QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){
: |" E4 y3 g' H - 7 b& j: T' j) N7 }& F7 |. @2 o/ _
- $QR = $picPathAndName; //已经生成的原始二维码图
C! H' }4 w2 c6 W: q/ i - * ?# X, \) ? [3 s
- $Logo = './pic/logo.png'; - Q8 ?$ U7 s. v6 b1 ^& O
- ' X& g3 t& e$ t: l
- $Logo_re = './pic/test_logo.png';
( R9 i" t U# Y( l* ?" ^" h
* K- @; c$ P3 w; a# _0 k- $QR = imagecreatefromstring(file_get_contents($QR)); 2 k7 M4 T) i& k* w% M
( i4 i' I& A% u% ?! v- $Logo = imagecreatefromstring(file_get_contents($Logo));
# ]- m3 s/ O0 h2 R1 e' z
W( f4 x7 H* L( T( R8 d- $QR_width = imagesx($QR); //二维码图片宽度
0 R4 H5 E" E- u- Y% Q - $ ^% d* x0 i$ C% W: m
- $QR_height = imagesy($QR); //二维码图片高度1 ~. k" q) ^ o1 v- c- ^+ g( ]) R4 }
- 6 F: f' {+ @+ C
- $logo_width = imagesx($Logo); //logo图片宽度+ r. E# F6 |$ g% {' l Z# U' r
3 m8 i# X2 n% w+ _7 Y1 o {- $logo_height = imagesy($Logo); //logo图片高度
; c A* \/ E2 |. p, l - 0 K7 e* y. v& e( y/ o1 i) h
- $logo_qr_width = $QR_width / 5;
9 C; G- H5 o5 [( q& S' M4 y6 G - 5 E" \+ H6 S3 C! U$ T" H
- $scale = $logo_width / $logo_qr_width; , W; o% ^1 J" m% I
- 4 e# a. ^ g& S! E$ C& G' Q4 d* D
- $logo_qr_height = $logo_height / $scale;
9 Q* ]5 W6 @# s0 |3 x# ` i# L0 b
) M, T# M- D6 o. \- $from_width = ($QR_width - $logo_qr_width) / 2;7 ~7 U$ R8 H! m+ H7 ^
- ; X$ N) n. S4 N
- imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height); ! ~* a& `/ `4 i3 Y( u( c
/ l- E# V( c5 U6 ~7 u# b- //输出图片
8 x |& j6 t i - 5 I2 n c6 g; d
- imagepng($QR, $Logo_re);- N; j$ s6 [$ ]" h' d a6 ^
! V5 Y" m/ F. @) Y4 Z- }9 Q/ e* |" h8 S: Q! Q2 l8 V+ I
. b$ n2 Z F1 M. c% t/ j) \7 j, N
% c1 r0 J. o! ?- Y J
复制代码 3、qrcode_vcard.php (生成电子签名)
. M* g4 x; N5 \) d$ e5 [/ d5 A0 O9 {. L9 S
vCard格式:https://zh.wikipedia.org/wiki/VCard
) }# |' N4 S w' b" `
7 J* |. [5 R: ^3 k
! q& P. H" y* I7 S% N; {- * Created by PhpStorm.
* j0 G- L6 o3 B9 E+ g# N
( ?8 N9 ]! f. e) t- * User: user
j- x& y5 Q; W+ U3 \1 |
6 v6 b7 x# w2 R1 @. K! x- * Date: 2018/8/15" o8 n# p9 c! W
6 |6 B! x, b& E# `! f$ ~0 V- * Time: 23:00+ n) A3 M/ O! H3 |: U- z# q& C
- 3 w, k9 ], M G$ E) V2 q
- */require_once "./qrcode/phpqrcode.php";/**
) F" g7 n2 s3 v; Z
9 b! K E3 l# J' `9 M% H1 a5 A+ a- * 生成电子签名8 _ a. I! N0 z
- - K& o- a7 m+ ^! X
- * PS;使用微信扫描二维码$ S$ u# m8 ~" i
( \3 g5 R i3 S1 S8 f8 V: i- */$content = 'BEGIN:VCARD' . "\n";//起始标志
v. ~- \ N2 A. q' ]- _. U - 6 ~, ?- q# y4 D. q+ T% o8 D; l
- $content .= 'VERSION:2.1' . "\n";//当前版本& `0 _3 J1 ^; ]- B) a$ ^% f
- $ o! D+ I. [ e- \+ ~
- $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名
) _) _0 y9 N: s8 ^1 `0 p/ b! G
2 y% F: H) f. J# C- $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称 ]' a5 H7 A3 w1 z6 }7 I( u8 e
# {7 W4 M3 u, e' h0 b& m) f& Y9 R- $content .= 'TITLE:PHP研发程序员' . "\n";//职位
2 s5 c' ^! r8 F: v2 A2 H% d
7 I7 r/ t, W+ e- $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话: g0 K) c0 z, Y/ K9 |2 K3 ~
- 9 c/ I2 P v. [$ b+ ^
- $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址
" J( \3 d' b: r5 T - & y7 h) n$ i4 h. N
- $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)
. X4 r- L# \ e% S. g% E
9 o6 O3 D& n1 n) G- $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话* |9 _2 _! d1 a% ]% y! U% N) Z" ~
2 e' f7 F a, Y- $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱
6 [. h6 z9 v4 ^+ C1 h: Y. c6 }
/ o) M0 W; J9 t- $content .= 'URL:www.baidu.com' . "\n";//个人主页
0 K/ c5 G4 Y. i* F4 i% V - 1 T/ z5 {# t! ]
- $content .= 'END:VCARD' . "\n";//结束标志
/ r7 s1 x% z8 S/ G - # }! L' O# U, o* k% C! i' _
- QRcode::png($content);
$ i+ c4 H; b1 _/ b- i7 E7 ~& K
2 o' B2 V1 F0 a( s. |- , G: P: b+ L' t- ]' m- ]
复制代码
% {9 B y% K1 `9 I7 \相关文章推荐:1 Y/ J) [. P. J, y& I
1.PHP生成微信二维码实例' Y* `) t% Z0 r1 o h# ^' ~9 B
2.php网址转换生成二维码5 n! P' L1 a8 n! w
相关视频推荐:) J, v# b$ N }& C+ v6 z: i
1.独孤九贱(4)_PHP视频教程+ o# j. I' j6 R: D# r2 e- \
二、JQUERY生成QR CODE f! W9 @4 k" q
源码地址:https://github.com/jeromeetienne/jquery-qrcode# I1 A' C$ Z) p5 v, j
C( X H7 n6 ujquery_create.php
7 m! [' N" e; Q- M+ t
" V7 c! c6 H" }) z% Z2 ]- <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码 ]1 f- j5 ^; t/ ?$ {$ _
三、PHP识别二维码+ L1 Q! V- M9 F' _
1、方法一. f" V7 G- P# j* R" W
环境需求,安装如下扩展4 l3 c2 E8 j) ]$ T
- ImageMagick4 d9 R# v N: }! @$ |; p
- zbar7 O, F* o0 L( x$ ]+ h! {/ X5 V
- php-zbarcode
* \/ _: N1 |+ |/ H4 ~- F; R0 v6 N* e4 ^9 D: G- h
2、方法二
! R: E+ D% F0 ]: }. G& p/ G5 ]PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以
4 `' y" }6 Q4 k& eqrReader类:https://github.com/baagee/php_QrReader" Z# [0 x# E- ]" E" `
" V, \' H8 X W1 T
u0 s/ |3 F) G, E9 [9 q, C/ t- $qrcode = new QrReader('./test_logo.png'); //图片路径! k+ L3 c% n$ e9 P
) g8 F# P8 v8 A0 h- $text = $qrcode->text(); //返回识别后的文本
' I# ]: G/ o+ @8 L - - B4 s0 d1 T3 R( t( L1 I
- echo $text;
) K0 Z( l8 Q4 @
& f# O( Y1 s8 c( Y8 J0 b- E) a' v: X! E1 k6 S
复制代码
0 i$ r Q0 B" p$ x& H- D4 M链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7( X9 ^& W; g+ F/ N$ X, z6 x
! a4 ]& u* N* H9 t8 y
% n' Q+ S6 a& F% d6 p6 R8 h6 h! p1 N; d7 g" n
* p a$ ~! n3 U8 a" Y0 n' E
/ F& z9 h* P% @
; a# @. y7 e- W: `5 U: D" _* T% T7 E# i X5 ?/ z: V M0 d1 E
1 N* {0 V, c/ r! `. V) l V( J f0 f
|
|