cncml手绘网

标题: PHP如何实现二维码的生成以及识别(代码) ------------------... [打印本页]

作者: admin    时间: 2020-7-24 00:09
标题: PHP如何实现二维码的生成以及识别(代码) ------------------...
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
- ?" D: y- e1 T+ C* ^5 P/ ~) Q---------------------------------------------------------------------------------------------------3 M# J. Z. x$ E% ?
二维码的分类
  B: Z' [7 a% X4 F线性堆叠式二维码
, h; i  T" Y* }7 z$ p# a' R8 m- k# x- j) R6 b& H2 Y6 r# o
矩阵式二维码& ]- F  v* w  k3 o

3 b+ f5 \) r* `. }' j3 u二维码的优缺点
) m8 b" D& @8 s. g, d9 L$ u优点
; x# _- B1 N0 F6 A7 S信息容量大2 L0 ?- l" T( b' u% G' s! P1 j& T

, o( v8 Z7 t/ Q编码范围广% M5 T! F. m# I8 y; ?
1 Q& n& F2 V  s% }/ z
容错能力强" E1 R8 m+ h; ~

8 p( U3 s( q* U3 n8 v; \译码可靠性高$ m& y4 p; p2 h  N3 t" K5 h
# ^' X# l% W& Z% {
可引入加密措施
1 Y8 U5 A; t% _3 s+ y# O; ~- O/ Z( l& t  R& {" Q
成本低,易制作
  k. a; S, F$ x( E- m
( c( O+ t% o. {, L2 ^0 V缺点
% P- I; l! p+ w/ q8 i! c* V+ I二维码技术成为手机病毒、钓鱼网站传播的新渠道
- M: ?+ s8 y- K' G0 s
) Z% v/ ^( I  V2 @" G7 C信息泄密
* I7 {  [+ L* }, C( e( g. u& w& o) \. n* [
目前流行的三大国际标准/ e* o6 H  ]5 X( @( U
PDF417:不支持中文0 s0 i! u3 ?) a& Q/ P" q

7 ?) s7 n- B/ s6 Q. B8 c9 IDM:专利未公开,需支付专利费用
9 d1 d7 R2 v" E) q* u* W
4 u# e4 P6 `8 S5 UQR CODE:专利公开,支持中文, i1 _) o: k( f! w% C# h

5 o! M! S7 f" Q% `# AQR CODE 纠错能力
8 C$ T; M6 [3 ?) ^" lL级:约可纠错7%的数据码字
$ Q8 m  B9 C/ C' D. f6 L$ G' e, }; w0 \& n; i8 w% F0 v3 b9 s
M级:约可纠错15%的数据码字4 g4 ~9 B$ G7 [+ n- h) K
: f! ^$ g, ^/ k! K# y7 l
Q级:约可纠错25%的数据码字% R! Y( v+ b: ^% F. w

! ?6 [  w8 B- p. I* ]1 G+ v! sH级:约可纠错30%的数据码字
7 s6 ?! V) r$ @% ]2 D4 g; h& S
9 \% z9 V6 f# X" _) G" P' n9 B( V前提条件! q1 h' t! z, Y' C4 u
GD库
9 V$ A. y' l) W6 _4 \, l
5 `) o4 [$ X3 k' o" l" v: t一、PHP生成QR CODE
. O$ N4 `+ ^+ P' G官网:http://phpqrcode.sourceforge.net// A9 b3 o1 g' l3 h* Z1 M
9 t. L( X$ N7 Y5 I
下载源码:https://github.com/endroid/qr-code6 I" q2 [" A& p) q7 B- Z

0 o" ~3 N- P9 j! q" l目录结构
+ l9 a( m. T5 h; p) K% |8 K" D - \9 h3 B7 O$ `  _
* _3 C; z9 N- g+ l
1、qrcode_create.php
; L9 i- N# n* ^) W0 Ops:生成普通二维码
7 I4 {/ P' [& S0 n, S
  1. * B$ u* {6 X% s$ R9 f* g4 p2 I
  2. include_once "./qrcode/phpqrcode.php";/**
    - I' e) m2 w; x! |( Q! V5 A; l% W7 P
  3. + R7 b% F3 l4 D' V
  4. * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径" u( Q" y8 T2 w* |) r' s! y

  5. 4 d0 g  G) T+ N$ _- C
  6. * 在浏览器上直接生成一个二维码(内容为abc)
    9 N) J+ j9 y% h1 z6 p3 S: O% u7 b
  7. ; F& K: `+ E8 ?
  8. */QRcode::png("abc");6 ]& h- Q+ _' L% Y

  9. 6 Z5 n, W3 W2 ?0 u
  10. QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**+ ^9 L. b/ L) i* I
  11. 4 [! _- `' X- R
  12. * 生成文件到本地- s: v5 q) n' f

  13. 7 P6 A! r6 n" a5 E- T0 S5 y! p
  14. * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)
    ; n# X. b, l) U; j

  15. 0 o. L. X3 `( Q4 y( g0 ]0 R4 r
  16. * PS:$saveandprint源码的p6参数做了修改$ ]+ z3 U" Y' v' t
  17. 4 w. d; N3 `7 r/ J
  18. */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);1 L# \$ a# {* n! p8 y% P: J
  19. % `8 Z  I3 L( Y# Y8 D& N" d
  20. / K. c+ Q: K9 C. w, @
复制代码

( B6 ]9 I+ C* n+ k2、qrcode_logo.php
! y: |# r$ p; T- u  x0 f; yps:生成带Logo的二维码

  1. ( a, P' @' Z3 j6 O) t( j1 J
  2. /**! l$ F; C5 n6 x8 l/ F1 P

  3. - W- f9 O0 G4 ~+ N, s( N
  4. * Created by PhpStorm.
    7 F9 _& O+ ?% Y0 H

  5. ' A& M. g7 i0 V  C9 ?4 s
  6. * User: user
    7 v6 v( c4 v) y, B; w; a
  7. 7 T2 E1 ?. K2 f- p  Z/ l( @/ |% {
  8. * Date: 2018/8/16
    # A# A3 @) [; t
  9.   e* ~. C! M& ~, Z8 [
  10. * Time: 10:43$ N' P1 b4 N3 L3 Z2 g  z8 N/ v
  11. ( f. K; ]# R; M& ^0 W' a& ]) \
  12. */include "./qrcode/phpqrcode.php";$txt = "测试内容";
    9 p, a7 C( Y" o8 o; ^# s

  13. 7 R$ g" W, \9 X& `$ k
  14. $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称
    + I' a0 }4 ^- A/ N
  15. 8 v' E2 E+ N' r% c
  16. $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是
    * _$ T' j, E* f) i

  17.   L8 ]7 B& F9 _; m9 `
  18. $margin = 2;//边距5 G2 W% Z, ^8 t& b

  19. 5 \9 @: X1 Y8 u8 @4 i! x
  20. $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片/ A4 x6 }, ]6 k* M  {) d! ]
  21. 1 u9 h4 z& y/ v( ^( Y
  22. QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){   
    7 d4 Z. {) y6 I0 ^8 _: n9 F. h. k

  23. # M" V5 ?' I5 w# |
  24. $QR = $picPathAndName; //已经生成的原始二维码图2 B; ^/ P; [! _; \

  25. + Q: S/ R8 \0 g* L" B5 ^, B
  26.     $Logo = './pic/logo.png';   
    / D  D5 \; X! @  z

  27.   K* P; z0 l9 h  R7 n. R$ ]
  28.     $Logo_re = './pic/test_logo.png';   
    " ~; z* V4 b( x; v' K. v. {/ |

  29. 0 h& x" [2 [8 M3 X
  30.     $QR = imagecreatefromstring(file_get_contents($QR));   ( ~2 ~. N6 K; V/ D( i  F2 {; N
  31. - b! d! G: x) N& `- A. Z
  32.     $Logo = imagecreatefromstring(file_get_contents($Logo));   ; Q) Q( r: n/ g& y- q9 E3 ]

  33. 7 T4 Z# G9 q$ t9 D( ^
  34.     $QR_width = imagesx($QR); //二维码图片宽度2 s. y' B) i( T- ?0 T: j

  35. 4 V/ s7 w9 N. X5 L" v; r
  36.     $QR_height = imagesy($QR); //二维码图片高度% W6 x/ m$ L5 u* ]0 b; z2 h2 d) ^, i
  37. ) @4 m) T; g: {/ P/ Y, B
  38.     $logo_width = imagesx($Logo); //logo图片宽度
    $ C8 s, h/ J$ X: J1 |% {" ]. s

  39. % ]) D# I2 e8 `# y* F9 F
  40.     $logo_height = imagesy($Logo); //logo图片高度6 ?) B6 @5 X* ^9 X+ [
  41. % Z# g* u& z! `9 h3 [1 h, }
  42.     $logo_qr_width = $QR_width / 5;   + y) G; s' U' P4 Z) |
  43. ! |4 d) F/ H2 [  J; L
  44.     $scale = $logo_width / $logo_qr_width;   . F9 L. J/ n1 d. B: L6 @
  45.   E6 V; R  i- j/ y  E! ~
  46.     $logo_qr_height = $logo_height / $scale;   
    6 V6 R- h; }/ J/ K

  47. + O9 `  u8 ^" _, b/ I
  48.     $from_width = ($QR_width - $logo_qr_width) / 2;* c$ ]% x7 V5 M3 g9 u2 \

  49. ! y  C& V0 m+ X
  50.     imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);   % m- e! D8 L9 c! R( C

  51.   X7 G; }8 z$ ?9 |. a- s
  52.     //输出图片
    7 U; \' c9 a0 f& d' v7 T

  53. ! l2 F4 k3 {) X+ y1 p: e* `
  54.     imagepng($QR, $Logo_re);
    . I9 W2 F+ @& V9 B
  55. . `6 r4 [: `) ~( @
  56. }9 n5 m9 N7 n( x

  57. % x5 m" I$ h7 i8 T! T; Z, c

  58. 5 ^/ d/ `; l' `; S! f
复制代码
3、qrcode_vcard.php (生成电子签名)
! G; y4 Z3 A' Y0 z" [3 M! }. ]$ {% s* d4 U, _
vCard格式:https://zh.wikipedia.org/wiki/VCard
& g- l1 `" K. T. [7 \3 F" x$ ^) I% t+ L6 C% J6 N, [3 Q
  1. ! O& w% Z( [" I" S/ D& s: v
  2. * Created by PhpStorm.  H* R. j6 m! }: h: W2 |/ g

  3. + v) w2 N' [) R
  4. * User: user2 p9 g0 q8 W- p: d% Q

  5. 9 T" p# a( i: J4 o) C9 H
  6. * Date: 2018/8/15
    & D# m! Y2 b+ W- V; h( Z0 c! r
  7.   S5 ~0 O0 n+ A9 ?+ e
  8. * Time: 23:00
    , _9 p& c4 J8 O5 F# b0 d$ Z

  9. % L5 t/ z( W8 P
  10. */require_once "./qrcode/phpqrcode.php";/**
    . t% o  _. r: S7 V, M+ }

  11. 3 O) }) r4 N/ a9 o( Y! c1 D, }
  12. * 生成电子签名
    ! A4 Z' r! B0 e9 J, l3 m) r' v, R) t
  13.   K2 E0 F9 {, H7 p8 r. D: r1 S
  14. * PS;使用微信扫描二维码
    1 p, w: [: ~% g$ t. j! j
  15. ; a6 R, x  K7 q/ v! Q- H3 x. K
  16. */$content = 'BEGIN:VCARD' . "\n";//起始标志
    ) n2 H" a; t; o, ?+ ]( y6 P

  17. % P, j& r* k  s) Q$ I: M
  18. $content .= 'VERSION:2.1' . "\n";//当前版本1 _' i2 B' O; I3 X- g/ |' ]* O

  19. / ]& w" n5 o* ]0 k( _
  20. $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名6 N* ]. B2 [$ x0 x4 p
  21. 6 W5 }+ r  a6 @; I6 O0 I! t
  22. $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称
    0 R6 }, v, t5 E, E" l& x
  23. ' w* r9 m: k  h) n' Y
  24. $content .= 'TITLE:PHP研发程序员' . "\n";//职位0 O: t0 M% O! S  c$ S$ c

  25. 2 t8 o! }3 }0 H4 m
  26. $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话, H* x8 F/ r( Y3 P. [2 {
  27. 7 U; k/ l# c; u2 P  j' i* S
  28. $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址
    1 T. `# [& h* d8 M6 s

  29. ! P% @0 I' l& b$ f* T9 d1 m
  30. $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)$ N$ d* f% m% s. v5 q' s

  31. # K  ^% I. }. E( Y* Y
  32. $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话- ^/ z, {) k* b9 v" i& a+ W+ B" P
  33. 8 ]0 n) v# b2 w  g2 L
  34. $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱
    $ F9 C* w& P7 F3 C

  35. 9 e# w* v4 w6 ~! o
  36. $content .= 'URL:www.baidu.com' . "\n";//个人主页
    2 e9 {1 \# T0 U: g

  37. $ J% h# k4 P8 r
  38. $content .= 'END:VCARD' . "\n";//结束标志/ M  [0 q4 q2 t. d) g" ?

  39. 7 i" H$ k+ X: N1 N" S- \/ e9 k( [3 U7 R( G
  40. QRcode::png($content);
    # l; N( s  Y0 Y0 ]
  41. 2 l% F  ]1 i" e$ I1 |% @5 |

  42. ! |# |% o$ v% M7 c2 t" o' c
复制代码

+ h; i0 x. I" |* x' y) M9 @相关文章推荐:
1 y8 S& L/ }+ a0 B1.PHP生成微信二维码实例
7 B5 J. g6 y6 u6 q2 {1 f2.php网址转换生成二维码$ g/ Y! ^- W8 k
相关视频推荐:5 |* ~% a) H( U, o6 i& M! [+ e, v& M
1.独孤九贱(4)_PHP视频教程2 a$ ?/ j% n$ }( J7 |5 J6 P
二、JQUERY生成QR CODE( _! `) _# e, M8 d6 r/ H0 L0 N
源码地址:https://github.com/jeromeetienne/jquery-qrcode
2 ?/ O; v& g5 F( g/ ^1 L1 e# q9 r  k+ k) k8 `
jquery_create.php% O6 o- L2 M# ?7 e, E

8 V* m& e0 y7 L! }( D. Z
  1. <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码
) }. N5 L% {8 K9 I6 x2 ~7 A* S) N
三、PHP识别二维码8 ]4 L6 D0 n' p" [0 J9 u
1、方法一
( E8 e+ K, u1 N环境需求,安装如下扩展# K! R( n) j) {5 u2 H7 Z
- ImageMagick3 U2 q  g' |. H5 ?9 t" Z! Y) P
- zbar
2 ~- a( N3 I/ A# e4 \" u- php-zbarcode, d$ s% P# @# `
" h: i% y3 M4 k. U+ k; [1 u" r
2、方法二
2 ^! X% h( i5 ~* ~# ]* d1 c* UPHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以+ x& p: D! J8 s4 r
qrReader类:https://github.com/baagee/php_QrReader
# g4 C& l4 ~! d: @$ \9 A  A
/ k3 C& L, T3 B8 p% U  f
  1. - L1 B7 o) J5 G- b5 m
  2. $qrcode = new QrReader('./test_logo.png');  //图片路径# d: O8 S" |6 E8 k9 _

  3. , E7 f! R9 T- N( Y$ y, f+ @
  4. $text = $qrcode->text(); //返回识别后的文本3 e* M/ i6 n" K5 X+ c: Q

  5. $ c8 Q; F2 r  i
  6. echo $text;
    ' v1 n- N# d: |7 s. [% w$ ^

  7. * {, S/ b# `  v1 P% [  |

  8. 3 W+ U% H2 v. ~  `, u+ }, }
复制代码

  p2 U8 T) n  j4 [& z链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7, T$ K, T8 A( j* L- A, X- }- J8 u5 J

7 S7 j, W6 x0 L4 }$ X& y. _3 h# r. E' S* z  i

) v4 l! n/ v" w* D. L1 d! f; D# X% I0 ^9 I& A/ U+ [. q

! ^4 F* m; M  D4 ]: o+ x: V) J  d8 |& h/ g4 T( t3 p6 j, Y5 v

3 z* C9 k3 e8 m) R5 b  v9 C
3 {1 @& M, ]1 c) h% g- }# P/ F, i2 G3 \; ?6 H  r





欢迎光临 cncml手绘网 (http://bbs.cncml.com/) Powered by Discuz! X3.2