您尚未登录,请登录后浏览更多内容! 登录 | 立即注册

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10274|回复: 0
打印 上一主题 下一主题

[php学习资料] PHP如何实现二维码的生成以及识别(代码) ------------------...

[复制链接]
跳转到指定楼层
楼主
发表于 2020-7-24 00:09:21 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。' M  M! D' n6 m; q* p! Q: ]/ |4 Y
---------------------------------------------------------------------------------------------------
* `' n$ O7 R$ R. l二维码的分类
% Y# K" M' E/ ?/ C线性堆叠式二维码, f7 Z' P- G5 @
2 g& Y3 |* |3 ]0 B! o$ c+ g% H8 u
矩阵式二维码
% F2 ~7 H  U5 p7 U* Z; b+ C0 L# H* |
) p: Y2 b3 \8 Q3 ~二维码的优缺点. E8 o$ n4 j" f
优点
) H, j9 i! ]+ @' J* f% C* _/ s4 T: l信息容量大
; @' x* ?( d: l) {
% S3 ^$ `' E$ o编码范围广, l, F0 Q* q2 O+ \4 ~
9 ?) H( z/ \$ C, r6 c! Y" r
容错能力强3 L0 M& v, @- ]; h0 w
: t9 N( K' V# V2 x, f! o
译码可靠性高
, B3 _+ L3 b" h: @- C# A. `0 u+ s) w0 @! b/ K3 i
可引入加密措施) J2 v, ?, S3 b+ x$ o4 e, N9 R
) W- T/ G: ]4 c* ^: j3 a- V8 ]' K
成本低,易制作
1 w4 k! j9 z& l, g7 B! n' e3 e4 W1 Q4 t' s
缺点
) A( v+ G9 x2 h& s二维码技术成为手机病毒、钓鱼网站传播的新渠道8 F6 n* `8 X3 O
  I3 r, H( e+ @' h4 g/ I
信息泄密
) j: I; f; m( {0 o# u
6 H0 f' I* c% z! C& `7 a  z目前流行的三大国际标准
& T5 ^6 \7 H3 L0 B4 z7 vPDF417:不支持中文
# M/ S7 F2 l0 K5 q' v1 }* I7 _' }+ Y8 s2 Y. {+ h
DM:专利未公开,需支付专利费用0 R" h; z0 H" L/ k, \% l" B

6 R: h# W5 }& e8 `9 rQR CODE:专利公开,支持中文' @! _3 t. l0 T
/ M, b  u5 [4 Z( q  Q( X
QR CODE 纠错能力
4 {9 |; u/ q; {. uL级:约可纠错7%的数据码字7 `9 r' |3 J* T2 y- ]
, O# c* c) Q% t! e8 `% A6 v
M级:约可纠错15%的数据码字* p  _4 z# x5 f- y
- \3 g. ~/ I5 b9 [, Q  T0 k
Q级:约可纠错25%的数据码字
. W; h' d$ m9 y: Z- g* ]5 F
7 P: D2 i) q, e4 J4 uH级:约可纠错30%的数据码字$ m3 p6 X! v" @
+ z! v6 G" f8 ]/ \! v9 C, w" u
前提条件
1 U* j- X; ]* {+ P" B( I3 wGD库
- H4 \3 F7 S9 a+ G. r$ }4 [+ p$ z, i, l
一、PHP生成QR CODE
8 ^9 r; _9 V% u4 J" z8 ~官网:http://phpqrcode.sourceforge.net/" z* z9 J" K, }# ^  p; F

6 x) s7 |+ X8 D  I% T( P  _1 ?3 P9 B下载源码:https://github.com/endroid/qr-code, L5 _8 l/ h3 i; x; ?5 A
" Q( i5 H+ Q) W
目录结构6 D1 D8 C* o" u- T- Y
4 W9 A$ B8 B5 i0 u
( |( B- s( Z: P
1、qrcode_create.php
# I5 g; k% e. {, ^* @; }ps:生成普通二维码9 l  a; f0 \# ]0 C9 |4 r, E5 J& J
  1. " `5 J! O4 p- W( K
  2. include_once "./qrcode/phpqrcode.php";/**
    % c) L" ^+ c- _) I/ l
  3. 9 x3 T% A: {7 y3 J; W, X8 u$ o
  4. * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径4 X7 P+ V" ~% b7 g
  5. + h/ i7 O% A) C3 k
  6. * 在浏览器上直接生成一个二维码(内容为abc)
    # o  O  P3 Y, A: W& ]

  7. ' G/ W( W! a' \" V/ {& P" J
  8. */QRcode::png("abc");9 M- O* |( ?. H* _! B/ o+ G# a

  9. ' u/ b+ I6 Q( p9 i- q
  10. QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**3 K2 N! O8 L2 H' ^$ W! T

  11. + S5 s6 Z* ^" o- c
  12. * 生成文件到本地7 t0 A0 [5 O: e9 t$ e% T+ L

  13. 3 k7 i- u6 A; J, n
  14. * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)
    4 L1 x6 ?; q  z5 u8 d
  15. . J9 H! [; F9 K6 ?
  16. * PS:$saveandprint源码的p6参数做了修改: B& J/ q/ G# b! y" |  F6 B
  17. 5 w6 N$ `; O/ ]2 ]) H
  18. */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);1 J% o5 _* ?8 o4 |: X, r" @

  19.   \: g! |, d- W+ Q8 k, M4 g

  20. 3 k$ w5 ]/ `* Y, r$ P
复制代码

) S6 u2 j1 B7 U' U" Z2、qrcode_logo.php/ o& M; |; F' H
ps:生成带Logo的二维码

  1. % k+ R2 t: J7 y( ]
  2. /**1 J9 n3 K* h% O- J: g+ R3 D
  3. 9 y0 E1 J! v- u4 W# ]( F3 @' l' G5 O
  4. * Created by PhpStorm.: n6 {; e+ M* `
  5. 3 B8 W' y1 G( c" y# o
  6. * User: user) y4 c1 ?4 J4 [/ L$ k- g9 K

  7. ( M5 L' Z# e$ I4 d
  8. * Date: 2018/8/16. r# k5 A( f1 A2 a; v8 q/ D$ f

  9. * ]0 N8 Z4 q! W4 ]7 ?
  10. * Time: 10:436 p! d/ t, I2 C$ ~* R( G
  11. * d' E' C! e( d! Y1 x* _; L
  12. */include "./qrcode/phpqrcode.php";$txt = "测试内容";
    ! b8 \/ _; W) d4 l7 g7 a

  13. ) p% ?8 @- X% X# U( m5 k. |  V
  14. $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称
    " U, d- A- A' J: O- \3 f

  15. $ d1 `& p+ ^7 `- b. v3 l- R
  16. $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是
    ; w" j- Y# _' h- f2 K

  17. , X+ x; b; E4 E8 n0 f5 b; w$ `
  18. $margin = 2;//边距
    0 I- k) t3 t; a7 h) M" S" l
  19. : Y5 ]* g# U! _0 ~$ C2 \
  20. $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片7 s. e/ H: ^4 {. O# ^

  21. 6 i" o! A2 I" n( v2 }
  22. QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){   , {/ Z0 A( N% a7 @! }
  23.   \0 M" ?5 g# _% y4 W
  24. $QR = $picPathAndName; //已经生成的原始二维码图' p! ~/ j0 F0 p# b' H: A% _

  25. . [4 W( u0 p) B3 T3 d2 r
  26.     $Logo = './pic/logo.png';   ; ^, |9 o. T9 r2 h' o2 M
  27. 2 B2 j- s  q& @9 e' ?! b9 K
  28.     $Logo_re = './pic/test_logo.png';   . m  a, h! b- d/ ?4 g1 R

  29. 2 o4 F3 i6 G- D5 a
  30.     $QR = imagecreatefromstring(file_get_contents($QR));   
    7 K2 T( H; E; S8 D5 B# Q9 K
  31. - y1 o" I- \6 [* {
  32.     $Logo = imagecreatefromstring(file_get_contents($Logo));   
    2 o+ q* H$ k# U6 j6 }
  33. , Q0 Q! D: j3 U' X
  34.     $QR_width = imagesx($QR); //二维码图片宽度
    & w) f9 D+ q: H  a' Q% }

  35. ! X* ^( D2 I. D
  36.     $QR_height = imagesy($QR); //二维码图片高度* i: K; m2 |1 k, K/ G/ q9 v8 F( u
  37. # q2 ^9 c' X3 O3 Y8 ?/ S: x% C5 n% C
  38.     $logo_width = imagesx($Logo); //logo图片宽度9 f2 \1 M/ C! `8 J9 f

  39. % l' `' Z) Y# y7 X
  40.     $logo_height = imagesy($Logo); //logo图片高度6 g9 o0 N+ |: v7 _
  41. " d* b) C, r' f6 Z0 o% f* z
  42.     $logo_qr_width = $QR_width / 5;   
    - {$ x3 D! }1 w2 p

  43. + H4 Y- I- s( I' U
  44.     $scale = $logo_width / $logo_qr_width;   
    * }0 Y8 m% \. I  {# Q3 F! M4 z

  45.   F1 F$ U% }$ q$ }3 L
  46.     $logo_qr_height = $logo_height / $scale;   ; ]  M2 d- z, `# d$ h

  47. 6 @% b+ L5 _8 s- R% K! N
  48.     $from_width = ($QR_width - $logo_qr_width) / 2;
    $ u3 F; I0 I0 I3 c# m. {# i# J# I

  49. $ p" X( X" y3 V1 n# g$ M. r
  50.     imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);   
    ' x% k6 L$ k$ T% y8 D

  51. 9 `2 g- ^; V) l" Z( _( T
  52.     //输出图片
    & S( ^3 q  s3 o; V! k! y

  53. * V* n, U( ~) a" m
  54.     imagepng($QR, $Logo_re);
    / V' L" M7 _! K" c' u

  55. 6 J- @# \, R$ Z! h
  56. }" P9 L% E" b$ C5 A( X
  57. 7 B: H8 w; ~8 C2 j1 |* \
  58. , u9 f) U/ d3 c+ j) o
复制代码
3、qrcode_vcard.php (生成电子签名)3 D% d5 j6 W) [

3 v" t0 c  p6 c3 b0 evCard格式:https://zh.wikipedia.org/wiki/VCard
6 g% `% Q3 D* @- v: H! j5 d7 A; G( _) f! o+ A7 P* |
  1. 7 u0 V  J* _6 i: r# D6 F7 C# t- m
  2. * Created by PhpStorm.
    4 y1 w$ E& z( o! P  w! I

  3. 8 w5 d, V" i* j* k
  4. * User: user2 }( e$ p# J2 L4 q1 W
  5. 9 ?/ f" ?9 \% z- a& F3 i7 L
  6. * Date: 2018/8/15% h( y6 b1 {6 V  [/ G; L! \' t7 L

  7. 6 X  _+ d  ?0 Q
  8. * Time: 23:00* k; w0 D5 r7 p% H

  9. . Y- A. j$ B: D* F" ~/ }& [1 r7 x
  10. */require_once "./qrcode/phpqrcode.php";/**
    + A+ s% D8 E. b2 ]

  11. 4 R& t0 }: E& N% e, w4 r& t; O& Z
  12. * 生成电子签名
    3 N  x( b" g# Y/ S& Q+ F- |. i

  13. 9 F* T4 e+ N& m( `4 c: l
  14. * PS;使用微信扫描二维码
    & I, t0 {- ~6 H' Q
  15. , M, W; c: _% [! ~# |  V
  16. */$content = 'BEGIN:VCARD' . "\n";//起始标志
    - f6 I+ n" E6 O  R0 K

  17. & Y# f$ A1 H( H" T9 c9 V
  18. $content .= 'VERSION:2.1' . "\n";//当前版本
    ' H* R1 [" X! b7 F/ n: Q
  19. + g5 y9 K$ G8 \6 y: ^$ G* }
  20. $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名
    6 ^. ~- K$ G) e- ]1 E- {$ [  s

  21. ' b% S, |" F8 ^  p6 T* r% W
  22. $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称
    2 @% K9 [7 U1 L6 ~$ @" t# [
  23. ' r7 {& ^4 t: S
  24. $content .= 'TITLE:PHP研发程序员' . "\n";//职位
    , q' q2 f/ o8 S: Z: t4 H  ^! B
  25. ; R% n8 f. @. Z6 |1 u1 T
  26. $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话
    1 K& G5 f- `4 x9 D4 k
  27. $ ~! z4 A  d! c
  28. $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址
    $ Z& Y3 b! T" g# R3 _
  29. , i3 o1 v/ ]8 [# i
  30. $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)- d* v2 a4 g$ k( ]
  31. 1 x4 r+ {7 l% ~2 C, P* g
  32. $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话- F. `: [! j) t* q" p2 P0 }; |& y  U

  33. 6 O+ J4 ~" [: e) n* E
  34. $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱
    0 J) d. f4 x# E+ ^
  35. 3 c' X6 F( |. D, r3 ~
  36. $content .= 'URL:www.baidu.com' . "\n";//个人主页
    ) D& \; b! [% a0 B6 R

  37. # U& T( t- Q0 B
  38. $content .= 'END:VCARD' . "\n";//结束标志) a5 W+ A: q: L* v& L+ b

  39. 7 [- _: ~1 [. V/ l, J" n. ~
  40. QRcode::png($content);
    # T, `- L( D- f5 X2 h

  41. 6 ?2 C' I# t: v$ z, r
  42. $ P( ]3 U2 D7 [3 X
复制代码

0 Q, P" S: \0 W# i9 p! C相关文章推荐:1 R9 r' U3 n4 w( u
1.PHP生成微信二维码实例
/ C( L# X4 s/ q) x2.php网址转换生成二维码1 ]( |7 ~7 C0 E& p
相关视频推荐:. d6 [' ^  o+ q2 U
1.独孤九贱(4)_PHP视频教程
& e- h. T0 J. S5 @; a/ w; ~二、JQUERY生成QR CODE6 Z7 r( o6 s3 V! ]6 m% V% |
源码地址:https://github.com/jeromeetienne/jquery-qrcode# b- p3 L/ c/ \2 n8 z* r. ~

3 k9 Z/ d% @; {4 _jquery_create.php
) P7 A( U8 b! z7 b; K6 B, m& E# q7 @. \: w9 n' B
  1. <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码
7 }% x) E+ r) ^- z
三、PHP识别二维码7 w$ `. b. c5 @0 \) @) q
1、方法一
. j# p' s5 `9 |, Y) G) H7 r: }环境需求,安装如下扩展$ g1 O  ]  w. P. S& h) ^5 Q3 ^
- ImageMagick4 P  H4 D* e! v- k4 M! ^
- zbar
+ u- ]: l0 Z. v' ~7 s, a- php-zbarcode
  _0 E% g% v6 z4 J  V4 ^5 R" l5 R8 N( L  ~  H! B
2、方法二
% [% O) ~& q, }PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以* T! O* D) {; E6 |# p3 R! z* {7 q/ r
qrReader类:https://github.com/baagee/php_QrReader5 g1 {  x5 E& g; ~& i

6 G; z; w: {# y! ~. q- w3 @
  1. : ^3 J& `' d9 H4 B9 V$ P& f  f1 o
  2. $qrcode = new QrReader('./test_logo.png');  //图片路径% f0 W# A" y% Q9 n- M
  3. - i4 f% Y# h. C. X. s
  4. $text = $qrcode->text(); //返回识别后的文本- v6 g2 X9 S8 S8 v  t

  5. % B& o1 ^4 U4 ~* l
  6. echo $text;
    0 g7 ~- f+ g. d

  7. ' Y# x2 L  a8 r. v0 R

  8. ' c' k; O8 U" P" }" C6 u) F
复制代码
7 {$ K% u3 w% Y2 o
链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7! V3 P4 V9 T0 c

" o4 v; o% ?/ c2 _5 ]% {2 z
5 h# O# `( o# U7 I3 w6 C: n) _' q$ B9 a6 J6 a
4 P/ \  r- ^6 c- w, N3 a8 [3 T) @( \

8 P( c7 b& ~1 w( j* R4 ]- J) M, H# w  F; |: c+ [
7 D, `1 K' a3 `6 J/ m6 V, G8 {

: h  Z, L2 |$ ?5 A3 b
' |  _3 l) X0 G
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-6 11:20 , Processed in 0.138454 second(s), 23 queries .

Copyright © 2001-2024 Powered by cncml! X3.2. Theme By cncml!