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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

cncml手绘网 门户 查看主题

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

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

本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。+ N- u6 p3 ~. _7 o" x
---------------------------------------------------------------------------------------------------, u" l  T# ]/ K/ D9 z) M
二维码的分类
0 b8 ?5 Y* Q2 W& K5 e线性堆叠式二维码0 I; n1 X  d9 |1 g
) m; H. ]" B/ [
矩阵式二维码
4 @1 O; I$ y0 J' C/ R. ~. T" |
4 A, K, |! |0 l( F2 ^* d7 s二维码的优缺点4 j+ E. _& P3 L. s& {
优点: g' z! G' x2 d3 j2 i& G! c3 U
信息容量大3 L5 I6 g- J6 l4 g4 @( O
# y3 W: ~. I& O2 h
编码范围广
7 Y- c8 r5 I, m- ~; b1 D! Z4 r) k% |
& ~0 n# W: L) ?3 \容错能力强: V7 i( r' l0 S) t4 z7 y

; J9 C$ Y& k' d9 t译码可靠性高2 c9 _' n( m& Y

2 P5 f/ t& Z2 G% g5 I$ O; ?可引入加密措施
2 `. z+ k, v8 t( [! g  B
2 x: ~, B, _  H1 W* V# f: Y成本低,易制作
/ S* I! h7 I1 |$ s; u
( _8 N$ F+ ]8 M* s/ T缺点! n. G& E8 V' d; H3 m
二维码技术成为手机病毒、钓鱼网站传播的新渠道# k7 ^2 |8 _! j

* u, K: G1 ]% T* q; l9 v信息泄密# \3 a9 o/ w) n  C
9 m# @* |  ?* M1 V# d
目前流行的三大国际标准
" l" |& d+ ^) ]9 G% l( [/ fPDF417:不支持中文+ ]( w- i3 ~* x/ ^+ h

$ M7 m: x5 b6 ]7 \DM:专利未公开,需支付专利费用
' `1 j" h3 U# W
; Y, u/ t- x5 y) yQR CODE:专利公开,支持中文
$ [6 e8 I# A* ^  u, Y- P: `& [( M
: f- C1 V( u- L* yQR CODE 纠错能力: e4 i, o& ]* E' |  l
L级:约可纠错7%的数据码字
+ |: K$ v; y# H& I0 `4 J
8 T, x  A% W; D: K4 ZM级:约可纠错15%的数据码字8 T. W; p9 Q, R, d2 M7 f7 W* x

; L! r3 k. p$ E# DQ级:约可纠错25%的数据码字
7 \+ E$ I$ L" q" ?0 K8 E& U% w9 G# f4 P  w* J% C
H级:约可纠错30%的数据码字; u+ U  l5 _) m- ?. W  j
( H/ w" f  u2 d) d
前提条件% G$ l* |. G6 e. L
GD库2 Z2 F6 i2 j0 @. _

" U- i% K' T$ |5 p一、PHP生成QR CODE
! u) r0 `- m' L官网:http://phpqrcode.sourceforge.net/
/ @0 ^, T7 q5 f5 d( p: }
5 s! T! l1 G  c下载源码:https://github.com/endroid/qr-code" m- [6 F& q! ~

8 X  d8 o5 |2 i0 W目录结构# r9 L2 P- q8 f! I; ~- r
03130c7c8ed2925e6f0fa9bf23525edb_1573193604581540.png & D% L* e# I9 |! R

6 }% ]5 g  G; t8 s1、qrcode_create.php5 N2 X( i1 `5 V* Q  u$ P: n( g$ d
ps:生成普通二维码4 G# g3 y- I$ V: }, b

  1. . A0 C: r% V; I
  2. include_once "./qrcode/phpqrcode.php";/**
    ( v# l. Z1 ~4 s3 d. V

  3. 3 J$ \$ w/ f1 P
  4. * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径
    6 X# b5 b2 [/ I( H# s
  5. 3 N& e( p0 z% ]' \
  6. * 在浏览器上直接生成一个二维码(内容为abc)
    ! G, a, S# L( h+ x
  7. + z& K# o/ T. g  {" i
  8. */QRcode::png("abc");
    $ e9 [8 m1 o( }" [3 L' {

  9. 7 M3 W7 L- ?$ p/ z, e5 D
  10. QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**1 J' `& `! e$ E( t. V

  11. 1 L- ~$ o9 n. X5 ^+ z; b* h' E
  12. * 生成文件到本地* t2 s+ \; j; j  Q

  13. 3 V* C4 D- l) {7 \
  14. * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)0 g4 g# K# h9 H
  15. . T, B6 Y1 v# x+ N& z1 v
  16. * PS:$saveandprint源码的p6参数做了修改
    2 v  z  X+ q& Q- @2 X

  17. ; s, E/ [. S5 V" X/ c$ d1 I
  18. */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);2 z0 z! [* e7 `, D( B- p% k
  19. ' Q/ `# P' n$ v
  20. 6 h( J+ ?' x9 z9 x; \6 C2 r3 a
复制代码
: \. n! T" G0 |- Y
2、qrcode_logo.php
0 O. Y  C  T2 U9 Z3 F- ^ps:生成带Logo的二维码
  1. - s' w8 D$ V5 V6 B
  2. /**4 R2 C% {) f; {; Q

  3. & Y! H8 B, z' Y) [) ]% i" H
  4. * Created by PhpStorm.* I- M5 H- i) R8 f+ V
  5. ) j+ ~( ^5 s( W- S
  6. * User: user; ^4 c) f8 B! V. `* t# e
  7. 5 X  N% D6 T" N- t
  8. * Date: 2018/8/16
    / X( X5 N6 G  A6 Q: V$ |
  9. ! g8 ]$ P: c8 V: ^! @4 d* e6 J
  10. * Time: 10:43- f4 d: f1 c; _  X

  11. 1 j" X6 w; u, {
  12. */include "./qrcode/phpqrcode.php";$txt = "测试内容";
    9 o3 S! R4 S/ d" a0 N6 J, \

  13. 8 |6 W$ j: @4 t$ L9 R
  14. $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称
    3 v0 D+ {! z( E1 L

  15. 3 C7 A1 A% Y* m- u1 Z4 o
  16. $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是  b& i! B% q& y" b4 n2 Y
  17. 5 Y; U5 J) o" X+ b/ n
  18. $margin = 2;//边距
    : o9 h% j$ |& D. _% @. g& l
  19. ) B: |# Z' H% M4 d: ?
  20. $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片) ~  i$ N$ S/ G

  21. : l+ e0 [2 t3 O6 L0 c( `; {
  22. QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){   
    ( @$ e- v5 B: O0 r
  23. 7 \! l( f/ r9 z+ }+ l; {
  24. $QR = $picPathAndName; //已经生成的原始二维码图# T1 Z) v% D1 U% u
  25. : W- J! t/ O. h- x9 r, z0 H4 `8 Z
  26.     $Logo = './pic/logo.png';   
    ( @2 ^% I4 y" e, w& P2 l5 U5 \
  27. 9 m) M, p6 n! O8 O8 F( Z6 _2 v
  28.     $Logo_re = './pic/test_logo.png';   
    7 k; L  E2 ?5 s6 ?$ `
  29. $ c+ \: N# q! @; `6 R5 k# v
  30.     $QR = imagecreatefromstring(file_get_contents($QR));   
    & D1 V+ B) g6 \  ]- [) n3 P

  31. * N; [5 y6 I  f  A0 |+ M
  32.     $Logo = imagecreatefromstring(file_get_contents($Logo));   " G9 Q- N0 q8 ]7 [6 O
  33. 0 _! u0 _' p' Y/ O5 Y2 P
  34.     $QR_width = imagesx($QR); //二维码图片宽度
    / K! @! f  D  N- b1 c$ q
  35. # x' b# g* j' c( x
  36.     $QR_height = imagesy($QR); //二维码图片高度
    - z) R0 g) G) H0 v

  37. + H  {* H' Y1 ~
  38.     $logo_width = imagesx($Logo); //logo图片宽度( W5 j; e0 h+ a/ {: A  s4 y/ D
  39. : P  x! G/ q% Z$ U7 ~" n
  40.     $logo_height = imagesy($Logo); //logo图片高度
    ) ?* ^* ]+ [. p- i6 c! q! X# |

  41. , T" V. |  o5 `! o( v
  42.     $logo_qr_width = $QR_width / 5;   + o2 T- Y) c! k

  43. ; _9 N* e! D6 U- A3 o4 }
  44.     $scale = $logo_width / $logo_qr_width;   
    1 i, c3 P7 Q5 Q  O6 D0 U
  45. 2 s' ?" e5 _% K4 v  W4 U5 A
  46.     $logo_qr_height = $logo_height / $scale;   
    4 V8 [% r4 ~6 r8 k9 |) o& B" v
  47. ! U- B  I" ?5 n- S$ o4 x* S
  48.     $from_width = ($QR_width - $logo_qr_width) / 2;* e  k$ O. Z$ B8 m/ S

  49. 2 n5 ^$ `4 }2 k: E
  50.     imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);   . }. @3 p) c8 q

  51. 9 y" ]) ]% X: g4 e. y
  52.     //输出图片
    1 P/ P4 `! i% H

  53. 6 R$ ?+ g1 Y' S6 Z9 g
  54.     imagepng($QR, $Logo_re);
    % a3 W  l  }) q8 ?6 K# K

  55. 1 X" r5 j$ O1 L% ?9 ]1 k
  56. }! E) F! W8 G" ~3 C  J* L
  57. 6 g  s5 D  W7 Z$ \/ C+ B" W8 N
  58. ; u  t+ I+ `) `( s! q' V
复制代码
3、qrcode_vcard.php (生成电子签名)- W1 x/ [  d* c3 t- @+ v) D
. G3 y6 H4 L; P' V& w6 {
vCard格式:https://zh.wikipedia.org/wiki/VCard
3 e8 ~% L7 @" j: e
+ b8 G" Q% O- u# `' r, j1 Q$ H" d
  1. * M6 c9 w% s7 t7 y) s  B
  2. * Created by PhpStorm.
    . s1 l; [- s/ H/ E1 I8 d# K; c2 y
  3. ( m. f6 ^) m5 F/ s; i
  4. * User: user
    ! {6 z  ?# K/ I
  5. ' ?& u+ M- S5 G2 ], o* t( W7 }& W" J
  6. * Date: 2018/8/15: ?2 q1 y- O& O! j4 J# B
  7. ; G1 S% H; z4 z/ y
  8. * Time: 23:00' S/ \+ P5 r8 _' d' Z; F
  9. & Z4 p$ Q, D% d! E+ L
  10. */require_once "./qrcode/phpqrcode.php";/**
    $ d. O0 ~7 M  L( b7 L) b
  11. 6 U) d" ]- ^  e! [; A
  12. * 生成电子签名9 P  s% Y8 G' A4 t: f* a0 E

  13. % v( r5 D' o& M! [) X4 _
  14. * PS;使用微信扫描二维码
    4 ], V- ~8 e% ~' c7 o$ |( X8 N+ @/ J

  15. ; O$ q% }+ E, t* v: E8 w, O) q
  16. */$content = 'BEGIN:VCARD' . "\n";//起始标志
    ! U5 q. d) ^, h
  17. 9 j4 t6 J" F) M- D
  18. $content .= 'VERSION:2.1' . "\n";//当前版本
    + H; E9 [( r$ M, Q; \/ G* x# F" b
  19. ! w5 `8 g# \& Z0 S( c$ G
  20. $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名  `% W2 `" n3 g% ?# k# O" [0 e- P

  21. 3 M" E& U1 n8 c7 M) g; F
  22. $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称! U7 G# C& Y# M

  23. 5 d' Y/ w1 L1 k7 j7 [: j/ p
  24. $content .= 'TITLE:PHP研发程序员' . "\n";//职位& e5 m  A- j2 r, S( j  M
  25. ; v* j6 j" l' R5 `5 a
  26. $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话: j0 i, T* l. V# R! }# W& h

  27. 1 a& T2 n1 w0 C2 m- O4 |* }" E+ c
  28. $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址6 Q3 ~8 B, {" k9 ?: g; ?& }' J
  29. . @2 D8 T7 I' z: G% P
  30. $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)' z; n- z* ~( ^) D0 D$ p

  31. - o" H4 N, M- @0 w* `. x
  32. $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话, `4 P+ {* W$ L' H0 y
  33. 6 B2 [# i! _, {; D8 E
  34. $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱
    . R3 m+ A/ B! I8 V+ {

  35. ! l: R/ [: K$ a+ a4 S& r. _
  36. $content .= 'URL:www.baidu.com' . "\n";//个人主页$ p& o9 {8 @' t$ V* {

  37. . z1 [7 ?2 M# L( r
  38. $content .= 'END:VCARD' . "\n";//结束标志& ^) R: b; v% C' K' E; Z0 C& y

  39. 2 B& Q. r3 ^, r4 k# a
  40. QRcode::png($content);0 c9 u; h5 s  ^

  41. 0 K+ k3 c) E4 l$ |
  42. ' y+ R. [# d% |8 W$ g
复制代码

: m; D4 F, }! I5 N2 o相关文章推荐:' G  \8 p" @( b- e3 z0 }
1.PHP生成微信二维码实例
: N0 I  A) I: Y6 v2.php网址转换生成二维码" I/ G. ^( T7 |, E6 _0 J, g2 ]) w$ y
相关视频推荐:+ _) s3 p5 f: R; s/ C( m3 H
1.独孤九贱(4)_PHP视频教程+ z% `; k6 y: u
二、JQUERY生成QR CODE
0 ?! \) W4 ^/ q6 {( c" D* V源码地址:https://github.com/jeromeetienne/jquery-qrcode4 D6 Z) X, @% o. y0 A

& Z5 H$ `$ S1 X( jjquery_create.php
1 i2 t* L$ K9 B2 F) n
( D( b1 l' H8 o
  1. <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码
5 J' @, G0 U1 }# q( c9 Y
三、PHP识别二维码, A$ J& O& W2 K/ D9 S
1、方法一( H  C3 Q! |# s* F, q* ^" i
环境需求,安装如下扩展5 x( I( U# Y2 ^: ^' Q0 O
- ImageMagick
' R1 b7 f2 M$ P8 a$ e- zbar
3 s: z0 ~6 ?$ I# O' d( |; k' d4 [- php-zbarcode# x+ }! }8 ~: p# C" R( D& c
& R7 K9 T2 S+ t- [( z( }4 g
2、方法二6 V2 l) V* g/ H* t
PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以& I: Z7 r3 U" ]. w* Y- N$ t5 D: s
qrReader类:https://github.com/baagee/php_QrReader
+ A  @8 E2 P' J1 J9 x% W3 h6 t0 u4 E$ n1 @

  1. 4 [! i# x; o9 i6 J# S# i
  2. $qrcode = new QrReader('./test_logo.png');  //图片路径
    : N( H5 e" Z5 \
  3. 7 f+ z' v% k. S1 P, W
  4. $text = $qrcode->text(); //返回识别后的文本; V0 i$ a- f# [
  5. : E' Z! g4 X+ _3 i* h% @# a
  6. echo $text;
    # @- _# B2 @) w$ r( U+ F) h) B9 s' U

  7. # {# s, B" f" \9 s

  8. : p' D; V$ Z1 O5 Z9 g1 `
复制代码
* s9 C2 J- n) T. h& }2 }2 ?, B! H
链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7
7 }9 }  Q# k3 H/ |& |( D
: D4 E/ [1 f1 o" G2 A3 ?- `9 S& w! z! Q' n; A; T) X4 _

% M& Z. ~! ~5 Q; P' B7 _+ ~: b; ~
; d& o9 X3 t6 o& m2 w+ Y

) I& u( G4 z7 j4 q* P# P
4 n1 x8 M8 }- G0 k( {
2 V# r8 J6 R$ ]4 @* J
9 A  P- l) P3 b2 J

最新评论

GMT+8, 2021-8-1 11:30 , Processed in 0.220905 second(s), 25 queries .

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