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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-7-24 00:09:21 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
8 n* |2 R( W3 ]& m1 E& x9 z---------------------------------------------------------------------------------------------------
. Q) v' W% f: H! j0 U8 B- ]二维码的分类
5 D* F0 O& w, v) Y线性堆叠式二维码
/ G  c, R3 v; h* I! e; d# J! F" M
) h" k4 `/ n) l# B4 s矩阵式二维码
3 t; F) y2 C/ Z( Z. O5 k! @; g% D7 h0 P
二维码的优缺点
0 E$ V" h' _; ]: @1 S4 t, d, U优点4 G2 y- f, T) R
信息容量大0 b, m3 I- @  Q1 X
% g7 q2 V0 ~4 H% G7 A; {' k
编码范围广$ J0 |. }+ X: ^8 e6 A/ A8 l9 k
- e8 q: @. ^4 e' Y; o
容错能力强
  n9 h* B. R9 M+ D' ]8 I; \  h  Z
, m2 j/ `: |" S译码可靠性高# y5 Z  N: {, M$ ]

6 I& }, G7 B* ^% {+ B% E' K% P可引入加密措施8 c- Q4 U0 J3 c! p) X. J
4 X) F3 a- C# b0 y
成本低,易制作
& N* j: L; j7 f+ S' ]" @: J8 F! t0 M$ r6 w. p& [
缺点
$ N& G; a% c: N- X二维码技术成为手机病毒、钓鱼网站传播的新渠道
1 J, G4 Z; O% o/ D; z9 X
' @9 c6 L1 L# g5 F% h% A# \信息泄密
# r0 D" t$ c& l) C$ S" F4 `2 `2 v- c+ F' t( E3 ]) ~
目前流行的三大国际标准
# E; r" u9 `' Y2 ?/ CPDF417:不支持中文
" R& F: T' J- u- N1 {. ]3 D2 `- \% c2 v! l' }; c2 C4 R
DM:专利未公开,需支付专利费用
* S/ R  U4 o/ s
& d) {# O) |5 @* g* M+ K, K& ^* dQR CODE:专利公开,支持中文8 ~1 z- M+ m$ X0 ~
! e5 F, L  n+ s  F8 _1 ~
QR CODE 纠错能力, T2 _* [. v' O5 [9 x& i4 a( k
L级:约可纠错7%的数据码字+ [% Q+ D# T( p

. G* c. \$ O2 `) l6 f. rM级:约可纠错15%的数据码字
9 n8 L& s6 Y1 B3 g! c$ e6 A4 f4 m; D$ r( o
Q级:约可纠错25%的数据码字' ^0 [- ~# m0 u7 r! l  r# H+ E9 y8 @
6 t8 u) P7 k  w
H级:约可纠错30%的数据码字
! J' Y- {8 I; t( R- K/ M. x% a- P% ~; `; w6 ]; ~
前提条件
; a, w6 t& z) n( c) SGD库# v, s& s  ]2 {& |; g

7 H1 y6 |& E* n2 `. _9 b/ G一、PHP生成QR CODE
% F. G# {5 v4 s3 o  `官网:http://phpqrcode.sourceforge.net/
. {5 A% d5 v. j, X& J4 g
7 i% ]  T& A# }: m下载源码:https://github.com/endroid/qr-code6 y9 E- a. i7 g7 s2 Q' v) J. L/ y
4 h7 a2 ^8 S2 a: i' w. [/ b
目录结构+ u( t3 I; T) d: X6 T2 _& O8 h

2 I& g" C) y# R: z& M2 h2 a! ?/ K  Q
1、qrcode_create.php9 ~, d; u: }* K' Q. K# l/ l
ps:生成普通二维码. y& ?  {7 _8 B4 ^; `- i

  1. - a- o  X( V0 B4 N
  2. include_once "./qrcode/phpqrcode.php";/**0 G9 |+ K) Y! S0 Y

  3. + |, M, f6 w# N
  4. * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径
    ' z  W5 f- E  w6 g4 n/ ?
  5. / q+ x9 |  `9 |! E% z, m
  6. * 在浏览器上直接生成一个二维码(内容为abc)
    % m' w* n4 ~8 W% x9 K

  7. ) e) o* A6 J# d5 m( t! r& h: g1 o
  8. */QRcode::png("abc");  `8 z/ a2 ~% a% i/ [! i, k' v0 K5 X

  9. - ?4 F$ \' @' p/ G! M
  10. QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**# c" A/ A+ F5 E/ I3 j

  11. 2 h; k* G4 E) x+ `9 K
  12. * 生成文件到本地
    . d6 x6 v  N9 q% Y9 k

  13. # J# G# x  ~# f# ]
  14. * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)4 c* @+ h) a  B& p, R; D
  15. 6 R* a9 b( B6 k9 o
  16. * PS:$saveandprint源码的p6参数做了修改
    & G- U. ?7 n* J, v: l- ]: K

  17. ( r& G$ D6 u% T5 t4 C3 b
  18. */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);
      W8 ^2 Q, z" P3 j

  19. * B: c2 a( Q! g1 L. ]6 W
  20. 6 \' |- X: f! B& s7 d
复制代码
4 D1 \' E8 j$ k% o, g
2、qrcode_logo.php
/ ]& i; U" E9 Ops:生成带Logo的二维码
  1. 0 x6 w) L+ B. ^' ^+ u
  2. /**8 e1 J' S6 ~$ H/ s+ h$ j

  3. : A( b. h5 Q' e, w0 T: q% K
  4. * Created by PhpStorm.4 h0 v9 v+ }+ `6 t: l. v( o
  5. # z1 S8 M9 x3 c8 a3 ?6 k% E, R8 x* Z
  6. * User: user
    / S; ~, \1 X) V4 y
  7. $ Z9 n9 A+ A8 q2 t% Z9 g! u  B! O
  8. * Date: 2018/8/16
    + H3 ^3 Y9 I# A$ S/ S! f' T

  9. * ?) P" M5 x* V- U
  10. * Time: 10:43
    ! {" ^2 A* I& \

  11. - d. f- r5 \! T; p
  12. */include "./qrcode/phpqrcode.php";$txt = "测试内容";+ U% s" \+ M/ [/ ^
  13. 0 {4 p; s6 a' \* C2 y& \/ z1 d
  14. $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称
    3 F: p& ?3 A5 l/ L
  15. : q0 {' {! j" y: K4 K) u2 H
  16. $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是9 I/ K, x, Y2 x6 E

  17. ' P' h: _* N6 k4 k4 s
  18. $margin = 2;//边距+ ~7 h, z+ U. Q% }, _" h
  19. 5 r2 N! f5 X- A3 g9 n5 c  h8 d5 y: J
  20. $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片8 Q$ o  o# m" ^$ f: ?8 f5 v

  21. : O% e6 d( W. ?* Z0 x$ b" N! m
  22. QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){   
    0 e" U9 M# n! U7 T, _( d

  23. 8 Q* |! h2 ~0 Y
  24. $QR = $picPathAndName; //已经生成的原始二维码图! Q. a6 [% K# m  Y

  25. 7 A5 D6 P: j, O8 i  r0 ]0 |+ V
  26.     $Logo = './pic/logo.png';   
    4 x0 q1 N: F+ O! g7 p! [- o

  27. / X8 w2 O+ |: ]
  28.     $Logo_re = './pic/test_logo.png';   5 F% D2 P* F# s' x) E
  29. 7 y) _( H9 S" P# F5 h
  30.     $QR = imagecreatefromstring(file_get_contents($QR));   0 o: V/ ^- M8 P8 Q

  31. + w) E! `0 e! ?7 m9 ?
  32.     $Logo = imagecreatefromstring(file_get_contents($Logo));   / l7 g" x% N2 B7 B: `

  33. 7 K1 l# S: \* u  L( ]
  34.     $QR_width = imagesx($QR); //二维码图片宽度
    * G: O; C( y: K& u, v, s6 G

  35. " ^  R5 d! K" d1 ^- R( I2 H4 b
  36.     $QR_height = imagesy($QR); //二维码图片高度7 G7 U- }) p4 [' }3 s
  37. 7 Q: c7 F" y; X6 `# n+ ^' i' i" m
  38.     $logo_width = imagesx($Logo); //logo图片宽度
    % D- E  |* q8 a0 }6 r. Z$ N
  39. 5 K6 Q( a  Z" y4 p" T
  40.     $logo_height = imagesy($Logo); //logo图片高度
    ( w- u) b( h- r& w7 U! {  O/ k
  41. 1 z' @- P/ U9 v6 ?" m  n% G3 }6 P
  42.     $logo_qr_width = $QR_width / 5;   ) R! S# x& \5 ?
  43. 7 G9 ^! p* C0 h' t
  44.     $scale = $logo_width / $logo_qr_width;   
    " X; k+ k0 k9 |) X9 A
  45. 4 g; r' ]0 g% o2 [& T. q
  46.     $logo_qr_height = $logo_height / $scale;   
    ; }. j& t, y, A0 X# ^6 u) N# G

  47. & ^1 z* z! Z2 s/ D4 y0 L/ k
  48.     $from_width = ($QR_width - $logo_qr_width) / 2;
    - K# G; p/ s! W1 R% u  |% u
  49. # @" o- f5 S" f" ]5 v/ E( ]8 {/ I( e
  50.     imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);   
    , h. v" x: ?! d1 W3 p3 X0 B
  51. ( x7 o  D* N, w
  52.     //输出图片
    ; x4 f9 N7 ?+ z7 g5 B: w

  53. 7 I  v& L% D' `* w8 v. I$ N
  54.     imagepng($QR, $Logo_re);
    # o( ?% V, p* s. Y4 t

  55. 6 J3 n( s5 K/ A3 R# _
  56. }% A0 Z" x$ u8 d* b5 L

  57. ( H0 }% I' U2 _5 A$ y! {

  58. , z: \  O5 d' C& W9 X6 X
复制代码
3、qrcode_vcard.php (生成电子签名)% ]* k- w+ O5 p0 E
& E& C. K, x% d# V- y: t
vCard格式:https://zh.wikipedia.org/wiki/VCard1 |- C8 l' T/ ?" H2 F/ q& @

& }$ ~3 {5 \- E+ K, }4 p: s

  1. ' Y5 Y! _- g8 k. y) W" a
  2. * Created by PhpStorm.
    ( {1 b8 \: O% I% n" y7 Q" ^& D  \9 c
  3. / \& A: M! u0 ]/ z* T( @- D" d
  4. * User: user
    * @! {9 c* F" O% P) t5 o. u
  5. / l0 K! `+ I) H& Y6 g% _% N2 r
  6. * Date: 2018/8/15
    8 u* `. b2 v8 B, t2 K9 ~3 I

  7. # j# T  J* F9 ]. V4 }7 \4 T- q
  8. * Time: 23:009 [+ m" ?3 o! F# T+ Y9 x
  9.   o2 X0 m. X' Q9 {& w' X
  10. */require_once "./qrcode/phpqrcode.php";/**
      g% ?2 I5 C; \( ]

  11. 4 `- X- e% h, T
  12. * 生成电子签名
    , S0 T& r* `$ ^- s8 H5 A- J
  13. * Z$ V% g- ^! M6 F8 n
  14. * PS;使用微信扫描二维码
    ) h% l+ O+ q; d6 ?) M

  15. 0 B) O" P5 C( T! E
  16. */$content = 'BEGIN:VCARD' . "\n";//起始标志, U+ |/ d0 T# h: w* h" n
  17. , p2 F$ h$ s" \; L  S5 B- u
  18. $content .= 'VERSION:2.1' . "\n";//当前版本
    ' F+ Q! P6 m- Y

  19. 3 B2 |. q& H: e: r) n9 t
  20. $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名
    % H4 l& k, ^! j& }) M
  21. & M" U$ K4 v5 k! v8 K- |
  22. $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称! W2 G) K2 w$ q$ e' Q3 q
  23. ) x" V5 T  f9 p2 b! F+ M( {0 S
  24. $content .= 'TITLE:PHP研发程序员' . "\n";//职位
    1 w$ X: m; L- Z! U8 E* |

  25. 9 \9 r: n- |( m1 B* A* A+ R
  26. $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话
    5 X, B8 Q) ?  J/ h

  27. * b. \. n7 {) y
  28. $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址
    # W" A$ R3 I' A* Z2 z1 z
  29. ) f- m# l( f- u! v; b
  30. $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)! _, C* d0 l5 u, ~

  31. + `) y5 a0 ~5 v$ H
  32. $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话
    - r7 w7 r2 g( t' D- }% Y$ u
  33. ' O1 z( t4 ?4 p, S5 u; i- B
  34. $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱
    8 |" v: T' |6 s1 C  U

  35. ) E8 f$ @) T, D: ]: n( `  |/ a* G9 O
  36. $content .= 'URL:www.baidu.com' . "\n";//个人主页
    * v% H0 \& }  J! N# U% F

  37. ) @" s: `' E( d9 |  c# Q# f% [
  38. $content .= 'END:VCARD' . "\n";//结束标志
    ( q! r1 O" G" B6 Y% w0 y5 F0 a
  39. 1 x! ?9 Q) I1 w6 v+ o* T! P/ e
  40. QRcode::png($content);! H9 T; U0 i( G3 j) F; G
  41. 9 {  ]- k7 W/ Y1 W2 c( N

  42. 4 V! L! y9 J4 c" i. v
复制代码
& A, H, x; v; e; w' w" n3 _. c
相关文章推荐:/ T) ?% J3 I1 c6 f$ R
1.PHP生成微信二维码实例* D- M% |6 J( v
2.php网址转换生成二维码" o* G& u7 n  n# U
相关视频推荐:
1 P& \( ^% N  `- ^1 {1 }! ~' _1.独孤九贱(4)_PHP视频教程  K# V. _  F9 p1 v- [
二、JQUERY生成QR CODE$ s( I( w+ L- m- H: b
源码地址:https://github.com/jeromeetienne/jquery-qrcode4 h6 |5 c6 m" y! m( x0 e

+ r- n  a8 C9 b( gjquery_create.php, f1 Z+ E: j" h0 t& N

! E. t% q- K7 S1 C" U- [* q# ]
  1. <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码

- m) T6 f) D9 C6 }3 {1 X  ?三、PHP识别二维码0 I% n& G. ]! h- ~: O
1、方法一
4 h! n4 u0 ^. T8 m; T3 V环境需求,安装如下扩展  T' L7 u3 E; p' v) [, `
- ImageMagick
8 l8 a& C, g( Q" h/ t$ c* a; \2 }- zbar
& [% s; E# |9 h% N3 @- php-zbarcode0 C7 V6 F  U; P! e4 I
5 p( W- K7 s8 I/ J& p
2、方法二* j" x- v4 F( ]$ h' j' Q
PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以# U8 `2 o2 \6 s
qrReader类:https://github.com/baagee/php_QrReader
0 _  S9 v* f  p5 f; Z! E! }9 J; E+ h6 J! R! A  u

  1. % ^- |+ \, p+ i" _, L/ n2 \' c( h
  2. $qrcode = new QrReader('./test_logo.png');  //图片路径$ W4 E; q5 z; W: j$ H
  3. / g1 ]- d9 |2 K$ \
  4. $text = $qrcode->text(); //返回识别后的文本
    8 a! ]. }+ l7 Q9 r% b+ }

  5. / w( L* m' a$ V
  6. echo $text;( x7 p; X$ G9 i1 e: ~; U% g

  7. * G- w  Z  G7 P0 g- g, ?; C! W
  8. 4 q1 s) Y6 f5 L7 n% s
复制代码
" K  @6 a7 G. m% i
链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7
3 ?1 y4 I5 i6 T$ S: j* K  V3 e1 h
& Y( Q2 O. e4 P% ^5 f. R; i" P5 m* K3 _+ `9 S
0 N& u. D3 k) C8 x7 ?+ ?/ e

' o/ ^6 L; Z# b6 ?  R! P! o6 q1 U# Z7 F

6 p: U& {  F" c' X2 X" A/ H& n3 w3 Y, n+ j

- k5 b  [. ?/ {4 _3 F8 H, n* q* l! o3 e- ?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-19 19:20 , Processed in 0.138123 second(s), 22 queries .

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