cncml手绘网

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

作者: admin    时间: 2020-7-24 00:09
标题: PHP如何实现二维码的生成以及识别(代码) ------------------...
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。6 k" n0 o3 V" Z" K, Q
---------------------------------------------------------------------------------------------------
7 s5 M& H. S$ U, H: q  q二维码的分类
6 Y- y$ G8 ~; j* n4 A2 ^线性堆叠式二维码; V6 @; x+ C4 a5 i8 l
+ z; F4 V& l* L5 Z7 L: F% x$ O
矩阵式二维码. ~0 k! G  n2 }. p- x

' ]* p4 y  Y# T6 c* v二维码的优缺点
4 @7 H* C: F4 w0 X优点8 i/ L% k& b7 ^% Y  ^
信息容量大7 q4 |$ m/ f& l. W# Q

! l) z* C5 G, B' @编码范围广
( I* E1 t; @% Q9 t; y
( J2 L- C/ J- u& ]容错能力强4 d- l& D& W% x  d, s! M
6 k# S1 T6 k( R, G# G
译码可靠性高
. }- j" Z+ M8 d$ t
  x% O( q3 i# i  |" n, Z0 \+ x! U可引入加密措施3 A9 q! r  ~+ w# r: Q8 W
/ n8 z: o: J1 s- p* b& p8 E. a
成本低,易制作$ U9 \; a$ t5 G  I% h; h; Z

# E9 x4 H% B# |( Z! d缺点) ~3 w; _3 e# t9 {( a9 i
二维码技术成为手机病毒、钓鱼网站传播的新渠道% v* _- J7 ~; e! y

5 o! C, }! R, f& ^+ r& I信息泄密
- M5 r9 F% u* \. O5 ]7 Y/ V6 x* F( C) q1 ?! ^$ F+ F
目前流行的三大国际标准% _0 u2 t2 @- w( D
PDF417:不支持中文
) C! C( m' V  ]7 n+ B, C1 p
6 W' j- Q+ Z* pDM:专利未公开,需支付专利费用
; G- O4 ?4 }" ~1 q9 [0 Q. C- t" s& s
QR CODE:专利公开,支持中文7 {# D& `& K- B) X7 N: j0 a

! Z! y! G6 ^6 Z6 XQR CODE 纠错能力
/ X! T" U* h8 oL级:约可纠错7%的数据码字
  H- C, Q8 U  G! j8 ?; S+ ?2 b7 D! W, Y+ J9 \
M级:约可纠错15%的数据码字+ N" m; y+ k6 z- D3 Y! c6 M, c
+ ^& Y) s$ c# Z5 a( S: R; ~
Q级:约可纠错25%的数据码字
* R9 `& j' z8 t/ E( C8 l
4 j* B3 ~3 X& ~/ y1 }  l9 ], sH级:约可纠错30%的数据码字) W1 c! J& ^" k1 @; f

4 ?, P9 O/ K  K前提条件
$ F" s- u+ S1 F7 u$ ~GD库* @. h! q/ n" i1 J# n! A, u+ S

1 K  A% z2 |* k! g, ~! C4 `; V一、PHP生成QR CODE1 J9 U/ W% B1 `( S, Q- ~( x
官网:http://phpqrcode.sourceforge.net/
9 d7 n8 h' S2 `  E$ T/ e, E9 \! V8 E, A. M
下载源码:https://github.com/endroid/qr-code9 h* e7 h0 m  `" n% c  [1 J' |7 l

3 \# ]/ U3 G" v0 l9 T目录结构
9 Y, ~1 Z; U: Z
1 x- a7 |4 f$ r+ @, R4 N& h' Q( g/ E; n$ k& Z
1、qrcode_create.php
5 d- W6 \' x4 o; L! ops:生成普通二维码
( H1 v+ e, f1 J

  1. & J- }5 d- q& z: H* p+ C
  2. include_once "./qrcode/phpqrcode.php";/**
    : e5 }6 K- d/ j# Z4 G4 q
  3. # h( [5 o" m: N1 J1 o& V5 J
  4. * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径7 d# q: S( m  t1 `* ~

  5. 1 A! p% X" e$ d( C
  6. * 在浏览器上直接生成一个二维码(内容为abc)
    6 W: [; q' @0 S0 V6 I

  7. 7 F3 _9 f& `# v# k( T
  8. */QRcode::png("abc");
    ' E! J& C  o" [/ i
  9. ; C! z0 `1 n( w- F6 ~
  10. QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**+ f/ F% ]1 H. _5 W; M4 L1 F
  11. 9 W2 x( t' A. [/ K
  12. * 生成文件到本地
    $ U  B& H2 z2 P/ o1 i% Y

  13. # `/ e/ X  Z5 q) Z
  14. * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)
    ! L+ M9 }/ E1 O, ?: L& S
  15. # m! H: H! s8 V2 w5 Y
  16. * PS:$saveandprint源码的p6参数做了修改
    " ~- ]* a* V6 G8 j/ w. U; d

  17.   r2 L  |3 a( x/ w. q7 o
  18. */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);
    . n& j& I% t$ \4 P

  19. 8 ^) z9 N. P" T: I: V  v5 t, y$ x

  20. , @- C- }3 c$ E" R; S2 o! W
复制代码

+ E$ d" ?7 u& g# a2、qrcode_logo.php* v8 m; d# V7 l& q6 Z8 y* |" }4 |
ps:生成带Logo的二维码

  1. $ H% y" ]9 T5 J
  2. /**
    " j" r0 u3 F( s. A4 L# D7 c
  3. 7 k" Q0 {2 j/ h! \* S
  4. * Created by PhpStorm.$ z% J5 R+ \0 Z4 s: v6 k- \! W; X

  5. 3 k$ t9 \$ ~9 U, [5 Q
  6. * User: user
    6 O( l; n/ q5 |4 M) _/ ?
  7. 8 i5 z. |' D0 [5 @+ R/ |
  8. * Date: 2018/8/16
    0 H  K* F3 j/ z1 u* o' ?

  9. 8 F* O+ s, T" ~1 s# Y$ ^& {& M
  10. * Time: 10:43* W. @( y) C- I- ]

  11. 4 k8 ?  u- s& ?1 a2 T# p
  12. */include "./qrcode/phpqrcode.php";$txt = "测试内容";
    " u9 |. s7 p5 P1 p+ W# y3 i( O

  13. 8 {' @3 M6 V' m$ v# `! H, M
  14. $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称* |3 P! e) w( O" k7 z6 M

  15. 2 ~- k, Y1 H! d
  16. $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是, `# m: Y  O6 ~. x' k" _
  17. + F) z6 y; u( g% a
  18. $margin = 2;//边距
    ' a! Z' E1 z) f" ^+ I7 _2 b  v

  19. 5 W' h) h! U6 F- V
  20. $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片  `3 L9 m  y; x' j+ E  g8 s2 T! r
  21. $ F5 L1 k  `- H% ], a) e
  22. QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){   - [( X* ~5 ?+ L. G

  23. ( h: b( D3 _) V" O* s9 r8 ?
  24. $QR = $picPathAndName; //已经生成的原始二维码图
    - a2 Z: w0 F" U* q! C- t+ c
  25. # w$ t; T5 [. u
  26.     $Logo = './pic/logo.png';   
    6 {, n/ E0 ~& L3 b, O1 X
  27. 5 i; c9 w. @( u* y6 [0 K/ j% ~
  28.     $Logo_re = './pic/test_logo.png';   
    / Y3 B$ m& O5 C, y& V! m
  29. + A* H6 A' H" \
  30.     $QR = imagecreatefromstring(file_get_contents($QR));   " B5 |7 {1 Z+ O  D" G5 l1 H
  31. & C5 i1 d' }" D( Z& V  x
  32.     $Logo = imagecreatefromstring(file_get_contents($Logo));   
    " l' N+ k. @/ H" Q. H% P

  33. 7 a. {# c$ W- g
  34.     $QR_width = imagesx($QR); //二维码图片宽度, `- m) e5 t" ~8 O& Y
  35. 9 D& q, k2 U( v) \0 F5 P  d; C
  36.     $QR_height = imagesy($QR); //二维码图片高度* W1 ?" p. V* M7 G
  37. ( w- J. n" k" R6 p, r5 \7 u! ?
  38.     $logo_width = imagesx($Logo); //logo图片宽度2 S7 E9 h+ t  j  ^; H- S" [; g
  39. 3 m4 i! l1 d! Z# S/ ]0 E
  40.     $logo_height = imagesy($Logo); //logo图片高度( I4 L% P; g" u' f: r6 o
  41. * \" D$ s, E  K( i
  42.     $logo_qr_width = $QR_width / 5;   
    6 _6 e4 ~0 v5 v8 v0 p
  43.   U- u+ {8 b) I2 h' r# L2 v% I
  44.     $scale = $logo_width / $logo_qr_width;   
    ) D7 o8 P6 V% x1 e- p0 ^

  45. % }) v% C& i' Q5 Q6 x" T
  46.     $logo_qr_height = $logo_height / $scale;   3 s5 w: e) K1 I1 E1 W6 C
  47. ! Y% I5 y: m: {) M1 h
  48.     $from_width = ($QR_width - $logo_qr_width) / 2;8 @" y) R+ j# y3 N
  49. + y, W* ?9 `3 {/ L8 q1 a; ?) J* ?
  50.     imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);   0 M: ]' R+ a( {/ f0 y2 \9 M  G# {

  51. ( j' j/ h9 l9 i5 U
  52.     //输出图片
    % w6 O+ R2 }7 l7 X+ {

  53. 0 a2 p, E" l4 Y' r
  54.     imagepng($QR, $Logo_re);* p# r! j9 d  e# [: ^
  55. 9 X) }5 j. w- t; J6 m, d: @
  56. }
    ( g3 i+ `3 C' U9 o5 k
  57. 1 k% O2 b# V. s, j9 Y

  58. 7 V4 L- u0 h, f( D! z
复制代码
3、qrcode_vcard.php (生成电子签名)
$ s& a  l& ]; }: X
- s5 G7 j7 I' ]2 D9 y. BvCard格式:https://zh.wikipedia.org/wiki/VCard% B: c! k6 d& a9 D

( v  N! q- P/ K( g# r
  1. 3 L( V) _) h, ~% h
  2. * Created by PhpStorm.0 a1 x$ ~" L% W9 C
  3.   g- O" ]% w- B# c% @) D+ v
  4. * User: user8 t1 D; O. n) W
  5. : x6 L3 L% @$ s
  6. * Date: 2018/8/15' o6 n7 Z. N. z' R* t( X

  7. + f' [$ Y+ @9 M- ~% Y* o
  8. * Time: 23:00% T* v. K) [6 o& b) r- }! i

  9. ( p- i2 p$ v+ V2 V! A$ T
  10. */require_once "./qrcode/phpqrcode.php";/**
    ; |8 C5 z4 N% h$ V

  11. & f; @  p6 \4 N& B  {
  12. * 生成电子签名% V/ D% ]- k! b" F0 H$ f
  13. 3 T$ k* M2 P: |( s$ m
  14. * PS;使用微信扫描二维码4 o8 c1 R# ]4 l# l
  15. 7 C3 h% C0 t, C: d+ c* \
  16. */$content = 'BEGIN:VCARD' . "\n";//起始标志8 R; g- u# C0 [% r/ l, ?, y( v
  17. ! w% o/ M' s2 W, b- l  I' N
  18. $content .= 'VERSION:2.1' . "\n";//当前版本& P, Y( B4 C- k6 u5 o

  19. ! }2 e- J$ ]6 z) H3 s4 e* h
  20. $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名/ m9 n- z8 \- p
  21. $ {' V6 T/ z8 i+ ]: H2 G
  22. $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称
    ! v) B) `/ }+ b, V& P/ f$ a( \, b

  23. 1 ]: ^/ _) B( [. }
  24. $content .= 'TITLE:PHP研发程序员' . "\n";//职位
    8 }3 j7 F4 u. S, J( d7 o5 ?
  25. ; h* _, a7 a) P, R' j! v( N5 W  M8 p
  26. $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话
    ) Y1 J0 P* a6 r4 }( \5 X) Q0 K1 `
  27. 2 N7 @" Y2 S  b
  28. $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址
    6 u; Y) `9 Q. }: u
  29. 3 D! Y& b1 d7 I7 q$ C& ]
  30. $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)- }/ i+ T2 c1 q- l' y& e2 u
  31. 1 l. [6 i& H2 w9 P  R. L( x7 \0 s/ h
  32. $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话
    : G" V; l2 Z* e. T, c
  33. ) Q9 ~1 j2 A: v, H9 \! Q6 ^( M
  34. $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱
    * p: B+ I  L1 o" P" i. W
  35. : s9 ~- s( S' @% L# M: `+ Q
  36. $content .= 'URL:www.baidu.com' . "\n";//个人主页
    5 E/ _' J5 p1 ^) d+ B4 g& L
  37. 8 V; m* n3 j& ]* z* w
  38. $content .= 'END:VCARD' . "\n";//结束标志
    7 x  g* Y5 m1 v% z6 z/ y

  39. 8 h+ b; k1 R" `- ?) a, e
  40. QRcode::png($content);+ t5 K* ^- D6 n1 g, E, q3 m$ D3 t
  41. 5 k; D+ T- ^9 l* @
  42. & o, N# n% E5 J5 r" T/ B
复制代码
+ j( U6 c& ~7 Y4 S0 ?
相关文章推荐:
7 B% K+ G- r4 o2 T- Y$ e1.PHP生成微信二维码实例% }0 ]0 n+ ~9 F/ R3 i( z5 X* u2 Q9 `
2.php网址转换生成二维码
  D8 @. _( o" o8 f2 F! \# j; g6 C& o相关视频推荐:
3 x9 _3 t7 y3 J2 ~6 C) |1.独孤九贱(4)_PHP视频教程3 ~) {' g4 B" K1 ~
二、JQUERY生成QR CODE
$ Z9 S+ l8 [0 t& ]- D" q源码地址:https://github.com/jeromeetienne/jquery-qrcode
7 N# E& v) B$ `& C' [0 S% x
9 \' H6 S9 E+ a2 V% bjquery_create.php
5 P9 i1 r! |9 c! H! J" F4 E  V
6 X; F- Z' ]+ N
  1. <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码

# E8 [- T4 n, C6 R- O2 j  k- l9 ]8 F三、PHP识别二维码
& ?6 \8 g' y7 p) k; ]# I1、方法一$ o1 v4 }5 f* S
环境需求,安装如下扩展0 v2 q7 u- U6 {0 m6 w) ^
- ImageMagick
: V' T/ q' V6 S6 d& f. N- zbar
4 `1 ]( ]0 s6 H1 ^- php-zbarcode
' [+ H6 }- G4 t
! T( |$ T1 r1 d( D/ w2、方法二3 r; a0 c- L5 p4 K( }
PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以
; h2 _/ n/ R* L$ M- b( U# d9 A- |# i3 [! AqrReader类:https://github.com/baagee/php_QrReader% }$ j( m+ f+ P* O4 C. g
0 n& Y; |# H6 a& x1 J
  1. 3 n6 {3 t) h7 R7 ~' Z1 i) n
  2. $qrcode = new QrReader('./test_logo.png');  //图片路径
      P5 o, [( U" X  V) Y! ^

  3. ' V" P- c& [$ b+ Y8 ?$ z) [$ B
  4. $text = $qrcode->text(); //返回识别后的文本3 A5 S& U5 V2 C9 I, E% C
  5. 5 `, i7 b* ?5 Q4 h6 s
  6. echo $text;, J+ ?' d+ {8 Y' g( T

  7. % _8 N+ _3 h8 r7 L* t( f

  8. ) B, E" f7 M) y, o
复制代码
* I( E" \* L( b: O+ \6 U
链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7
3 ?" T) |" ]1 t& n3 g; d+ {
7 \/ a& v8 z5 \- r' `  Z# Z/ b# [. e- C1 P4 M- F6 L

2 C) T3 _3 t7 {" j" X8 ]) K3 I  U

) H5 y& B- `9 l% V( A! N( s/ N  e1 O! X% O- S/ O

6 G" O; A; w9 [4 \" O6 g2 F  u3 s3 B: R& v4 ?" X! d7 }( w
6 |4 H4 N7 A  ]





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