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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

cncml手绘网 门户 查看主题

PHP如何实现二维码的生成以及识别(代码) ------------------...

发布者: admin | 发布时间: 2020-7-24 00:09| 查看数: 11684| 评论数: 0|帖子模式

本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
% {' b8 u8 o) l, [, s7 O3 E  h( N---------------------------------------------------------------------------------------------------1 e: N3 P* n5 Q( y8 k0 d/ l5 t
二维码的分类* S" L5 c0 x  [8 `+ X! ~
线性堆叠式二维码
3 Q. C! f0 R( Q+ [# b* S* k: e
' U% p, j# V% Q0 T2 x' b- s矩阵式二维码) S, y/ c4 _& `6 {& m
" D6 M5 z  m% J3 d+ T0 w
二维码的优缺点
; t( g' C& A( X2 q# R( N, T优点
* F0 o1 p& m' l9 i5 E信息容量大8 A+ q- ?1 ?. Y* Z- Y
6 \' N' S4 A, L( t' `" a$ b0 J7 Z
编码范围广; L5 c9 r: a. v0 b# [9 t' T5 s
) M& }8 r8 l3 s) \0 {# k9 G- m! }
容错能力强0 _# B- k4 y( h5 |1 K; u

* W! M3 o9 q6 w, Y# R7 k译码可靠性高
) q. V# g: i$ N
5 L( ?8 T8 Z- Y+ j可引入加密措施+ J6 j) z( n+ A3 L% F

; }8 I4 ]+ }! D/ @0 x1 U4 }成本低,易制作
: g+ C0 y: J6 ?  _" b+ W9 r
$ X! S' y: n; z  _' f0 J缺点
, ~% K; f9 Y4 f. M" I+ n0 T二维码技术成为手机病毒、钓鱼网站传播的新渠道, z" g, r) K8 [8 @3 |- B. r+ p

/ h( ?' {( G( M8 K信息泄密
+ _2 m' x4 K) K5 c
* g' |/ e$ N/ L% [7 b目前流行的三大国际标准
7 Q( T! J( D. d; A# CPDF417:不支持中文
% Y6 y* h* X$ g- l  S# ?/ y! y6 T+ O+ m, O" F3 D
DM:专利未公开,需支付专利费用
4 a* y7 b2 P8 C. i' z( `+ _' \9 a8 l8 t
QR CODE:专利公开,支持中文! ?' ~) A+ y% y

: w' e( s& d/ j" z! Q7 s" tQR CODE 纠错能力
/ @1 n: a' A4 |' CL级:约可纠错7%的数据码字( h% O0 E( ]  U  y, M0 O- B

& l7 u+ B8 Z/ L/ I2 N! UM级:约可纠错15%的数据码字$ \6 p  m% C7 V% o/ e

0 |" T+ c& Z7 k+ d0 LQ级:约可纠错25%的数据码字4 z2 r6 W0 O) B

) I; y# v' `$ e1 w2 F9 T  QH级:约可纠错30%的数据码字! {. \6 q0 Q' Z+ S
8 `, P# \0 h* _) W3 b
前提条件) p) c# ^' z% k! M7 I
GD库
3 W. _2 I# i' p9 R: G6 h2 m  G  J5 s) E
一、PHP生成QR CODE$ y2 C0 d: a3 u3 w3 C* R: e/ q% Q
官网:http://phpqrcode.sourceforge.net/. z' O; H6 f( I# |2 c+ Y  d/ h3 e
0 u! g: K$ a$ @8 Q  L/ o. _1 `
下载源码:https://github.com/endroid/qr-code* j6 l4 ?% v# K% L5 A4 M
  e3 B% M0 |# f
目录结构
* K6 Q9 }( D/ g8 Q- J0 x) _/ W" n ' Z* G7 C: @, ?+ Q

4 X' u, l; f! Y7 R2 i' h1、qrcode_create.php8 E9 W- m" u1 z$ L8 Y
ps:生成普通二维码
( f! d: w) u+ E

  1. 4 M% Y% L6 i' _7 S( r$ J
  2. include_once "./qrcode/phpqrcode.php";/**
    . Y8 \' W8 F: [4 M/ @  Y" S
  3. 5 w" @' c4 d4 f& e
  4. * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径
    5 X, ], m% x% Z& m: I: g
  5. + v3 U9 n6 B0 E7 I/ t
  6. * 在浏览器上直接生成一个二维码(内容为abc)
    ) {5 j: [# z/ A: I
  7. * }2 N7 r) a! q  A. @! D2 Z
  8. */QRcode::png("abc");
    1 R6 {- q. i6 L0 A$ D  o# U" x

  9. ( ]3 }- ]6 W8 S0 t3 _6 I
  10. QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**
    % y0 T3 t0 C; j

  11. + H  e5 p, p/ T" j
  12. * 生成文件到本地* f* l! j" h4 m3 P9 f: q7 G

  13. 0 @* }" [5 e* X; K4 a
  14. * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印): L5 l9 A: e% [- s& j

  15. # U5 g  r7 p7 C) C# e9 I
  16. * PS:$saveandprint源码的p6参数做了修改
    2 J# P% k' J! p

  17. , W% j9 n  C0 Q4 I
  18. */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);* b- Q9 [$ }2 H! F4 A+ w* Z

  19. 8 D4 [+ L4 H0 h, I9 C' o, `
  20. 5 u' s% W  Y1 i6 s& s# z
复制代码

. C/ r7 H6 I0 ?" D5 M2、qrcode_logo.php
* W% X) L1 L- X( Aps:生成带Logo的二维码
  1. ( l! a1 o( X) A) C/ m0 c& }+ A2 e+ o: ^
  2. /**
    % D6 w% h" Y4 k  D! z1 O
  3. 5 ?  |7 G. N& ~
  4. * Created by PhpStorm.
      z' J# X+ |; i0 g

  5. 9 p- d, K6 D! \; n
  6. * User: user2 z* P! ~# v  F; g
  7. : c/ c. N/ F3 \/ L& r& o  ?
  8. * Date: 2018/8/167 W' t1 r2 Y1 N, D) [% D$ F
  9. 4 |& `) b" Y) u7 l$ B& s1 `8 ]
  10. * Time: 10:436 l3 o- X5 c( v/ g' k3 r

  11. ) U- L; B1 }- o
  12. */include "./qrcode/phpqrcode.php";$txt = "测试内容";, [( r% E: W% r" d- F" Z

  13. 3 \/ Q0 ~) h" y& L" O
  14. $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称
    ; \' Q' F/ q# [& f
  15. " }. H0 u  i! ~
  16. $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是
    2 f. l% E0 g! _

  17. - G7 ~5 f: _& S0 Q7 ?+ u# U$ w
  18. $margin = 2;//边距# \7 Q: M9 \) L5 m4 K% k

  19.   v7 n" N3 Y5 m2 H- k  B" Z1 j8 F8 H$ N
  20. $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片& m! v: g" c4 f6 n
  21. ' S% `& L5 c) f
  22. QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){   
    0 c6 {) K1 E4 O' p/ d
  23. " v' J4 i: A4 j' H
  24. $QR = $picPathAndName; //已经生成的原始二维码图9 y3 B3 ~2 l7 B' |4 j- j3 ~

  25. ; C' J4 Q9 A. {
  26.     $Logo = './pic/logo.png';   - W# |7 t0 h5 P* l" i

  27. ) Y8 x) U8 M' k5 ~5 V( G
  28.     $Logo_re = './pic/test_logo.png';   
    ) @0 d; Y! ?, [1 i- y  L

  29. , B9 c8 O) o" V" b1 A
  30.     $QR = imagecreatefromstring(file_get_contents($QR));   
    0 T4 D2 o9 W6 G* m) m8 h0 ~0 c

  31. 2 o; C& P# e5 H/ _
  32.     $Logo = imagecreatefromstring(file_get_contents($Logo));   
    0 r/ F* l- ^* A
  33. , q5 U) Q8 I1 Y) r* u% y7 A
  34.     $QR_width = imagesx($QR); //二维码图片宽度: U8 C, E- N/ ]7 m4 `

  35. 5 b" i  l) @% m/ R* ~
  36.     $QR_height = imagesy($QR); //二维码图片高度
    - E, @1 R4 k8 j4 Q3 [

  37. 1 A0 @4 i" d8 v, k! B' _% c
  38.     $logo_width = imagesx($Logo); //logo图片宽度
    2 O6 V% }, u$ I6 q5 l

  39. ; m) X7 x" q# h- [5 W3 D
  40.     $logo_height = imagesy($Logo); //logo图片高度
    2 o& i, `! q/ @

  41. ' E2 O7 x+ N  \9 P+ t* |
  42.     $logo_qr_width = $QR_width / 5;   * W* ~* _1 ~- A1 j% z: h
  43. 2 c, m( k# Z* ], a) R* `# V0 o) t% O
  44.     $scale = $logo_width / $logo_qr_width;   
    ! I  J; ?  Y+ z' e  R
  45. 9 e9 T. n; O( _+ H' Z
  46.     $logo_qr_height = $logo_height / $scale;   
    5 R5 Y  M" n4 b+ ]7 ~

  47. 4 J- P. q" V4 L( j
  48.     $from_width = ($QR_width - $logo_qr_width) / 2;. x( d8 p. T5 d( g1 C( j
  49. $ L1 V& j' ~7 Q+ Z( g/ a. S5 j
  50.     imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);   ' M$ y  ^& O5 w! Q! ^: Y- N, Z
  51. 0 ^6 @5 `& z5 k
  52.     //输出图片
    ' N5 W  C7 }. G

  53. $ A0 R. G. ^, f+ U3 C: C! t
  54.     imagepng($QR, $Logo_re);
    ( C2 o# E. ?' R2 I' b

  55. + [8 ]* J, z1 i) S8 l0 x
  56. }
    2 A" D8 C7 t& y8 s/ b

  57. ! n6 L! X8 b* H6 c
  58. ; D8 s; |& L/ }/ `
复制代码
3、qrcode_vcard.php (生成电子签名)
6 B* A% u, C& K4 l) Q
% ~. K* p8 K' C  Q. KvCard格式:https://zh.wikipedia.org/wiki/VCard6 y+ `7 o# Q; R' ^. W6 @1 V/ t

7 r% V# f( a* J/ k0 e5 ?$ a3 c

  1. 6 _3 K9 \$ e( W; l  o6 N7 Z
  2. * Created by PhpStorm.
    3 o: a2 L+ r! L  w

  3. 4 C% k$ U5 c9 |  N. o! N; J6 [1 }
  4. * User: user
    * |+ t. Z1 `/ P3 p" V7 G+ o, l2 c
  5.   D& y3 f  y( _6 e5 |
  6. * Date: 2018/8/15
    * w4 S$ p& v; Z4 q! r! Z( E
  7. 9 a& k0 q; L; h* R* c% l
  8. * Time: 23:00
      F  _' t0 h' C) E% F
  9. 1 q  E6 N' g0 N) i# j
  10. */require_once "./qrcode/phpqrcode.php";/**
    + d/ y+ ?, E( x: G5 [9 P. B

  11. & g' h0 _8 X8 m1 ?5 s: T
  12. * 生成电子签名% W  H  _9 p* o$ u
  13. 2 E+ \% o7 \% w  E
  14. * PS;使用微信扫描二维码
    / b4 X1 D0 d" g+ L& y
  15. & b( H) [7 [- F1 n1 C& `( y2 p/ K$ z$ k7 c
  16. */$content = 'BEGIN:VCARD' . "\n";//起始标志" \8 W9 |' b8 U# c/ Q3 ~$ x
  17. 6 J4 Y* G  n. F! M7 w
  18. $content .= 'VERSION:2.1' . "\n";//当前版本6 k6 C( k6 t* T' i- O8 R- B# D
  19. 6 x2 R2 s. w/ N
  20. $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名
    ! e* ^6 E9 h  E& w' [

  21. 3 Q( I+ ?" M$ Q9 [9 b
  22. $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称
    , ^/ |8 K8 U4 J8 Q8 R- D5 R
  23. 9 I: ~  F" f7 Z  ?9 V+ ~8 ^4 Q+ Q
  24. $content .= 'TITLE:PHP研发程序员' . "\n";//职位7 {4 u$ b, s$ y' [. N) m6 _

  25. + D9 u7 ^/ x$ b* @, m; S
  26. $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话, r4 F: J1 z, e; d& k1 i) X
  27. 2 c; @4 c' @% M& s3 i
  28. $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址# l" E, N$ C0 S

  29. . X, d% j1 ]5 h
  30. $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)
    / r% o; R# V1 A# ^2 J8 }  p& r

  31. & [3 Q) ~, ?! j- P" z+ F
  32. $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话
    5 R  s0 @( b  P

  33. 4 X. q" v; D. @8 z
  34. $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱3 c5 D- P4 N' P& }9 \
  35. * p" ?( x4 U5 x8 H, K# h3 B& g; r
  36. $content .= 'URL:www.baidu.com' . "\n";//个人主页  u2 j! ~: b# b3 r# X6 w
  37. 6 O9 }( s  x; Z
  38. $content .= 'END:VCARD' . "\n";//结束标志1 D8 `$ W3 ~6 x: _/ k
  39.   E8 G8 Q( H: A5 E8 Y: j
  40. QRcode::png($content);
    / @3 d6 w. Y! j  l  ]- N

  41. + b  f7 l# Z  q& ~  |

  42. . e( }9 d7 l3 `$ [( M% l$ t" G
复制代码

9 _1 R0 C& J# l, t& C相关文章推荐:' ~' M  |8 _1 f* s
1.PHP生成微信二维码实例5 O7 U/ Z, q# A+ Z* N1 L
2.php网址转换生成二维码9 \4 e' D" p; V! X/ Y, F
相关视频推荐:
7 U1 D& d* p0 ]) {0 A& b1.独孤九贱(4)_PHP视频教程5 m: f. g2 Q7 B+ j+ T# J5 y" U
二、JQUERY生成QR CODE7 g! b% U/ T$ `% r/ q
源码地址:https://github.com/jeromeetienne/jquery-qrcode
% `1 w# k. E9 f4 I) ]) Q! O( ^
9 ^! e7 x8 |. ?9 K7 Ejquery_create.php
0 w& C5 @9 D3 e  K# H. m# u9 f0 f& K0 N8 ~. m! S4 J
  1. <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码
  s$ K' r0 y; e# p
三、PHP识别二维码
& q5 u. i' z1 A( `/ N* c1、方法一, |; Z- b) r: U/ M+ R6 r9 f6 [
环境需求,安装如下扩展# x9 F% C) X2 M" P
- ImageMagick2 I, F2 I: o; _
- zbar
2 m6 Z0 _0 p3 D- php-zbarcode: P& C% z$ b, r1 H

+ A8 b4 e6 C( y0 f# U- e2 f2、方法二. y  N. K# W3 B
PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以
0 i: V1 D6 \9 g) F0 p/ X/ EqrReader类:https://github.com/baagee/php_QrReader! f6 ]  ?) f0 r5 G9 I

* R# }/ b- U3 `) g! h6 A

  1. % o. v4 l  q; F
  2. $qrcode = new QrReader('./test_logo.png');  //图片路径+ k# U) b# e1 }2 ~
  3. # n% |- b7 Y1 n. i$ P7 X& p% d
  4. $text = $qrcode->text(); //返回识别后的文本  o, K( S% q7 s" x8 G
  5. 9 g' G& Y: u9 C7 }" b2 B3 j
  6. echo $text;+ y0 o7 Y  f4 a/ _

  7. 4 p  O. p$ h# z5 P" N8 q0 U% ~

  8. ; ?) I2 H  n/ I2 T
复制代码

2 c2 L" m, P* _* y5 p. D, C. P( x: D链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y74 q1 f* Y) N* a4 A. ^9 ^+ u

/ N7 x# L* L9 B& M7 h' s( o  S5 _: `# B. V1 [0 I

1 ?  B9 `: ]; E3 P- _4 B. a3 E" I& [7 S) v. ^$ m9 u5 E: t

! P" P. v9 O0 @( h) W3 g$ a4 s
- o7 v5 [# ^# k, C$ ?. s5 s9 l

3 _/ n0 t. Z& N% }. M, l. i) `1 H8 Z) K! B

最新评论

GMT+8, 2024-7-27 22:38 , Processed in 0.156141 second(s), 24 queries .

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