cncml手绘网

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

作者: admin    时间: 2020-7-24 00:09
标题: PHP如何实现二维码的生成以及识别(代码) ------------------...
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。* p7 \  D' F( q6 D) h: u$ a) D  q
---------------------------------------------------------------------------------------------------
8 T% j2 U' E9 E% k0 h& o二维码的分类
5 n0 {6 p: e6 B7 K线性堆叠式二维码
( L7 ^8 [, \; Q0 {7 D" H! p- |' V
6 U! y( N- h' n- g0 r$ u% N3 }矩阵式二维码/ h5 Q0 {. y# _" W& V' N

. f. j: r- z! O, A& o! F9 K) Q二维码的优缺点7 {& J# Y' ^4 q" [2 b
优点
# Z& P0 e! r9 X7 s* f& T信息容量大
. C" ?5 C. w0 L* d, N0 _$ t4 D, l( `5 e; _
编码范围广
6 f1 O3 X; \& l% g* E4 a- c8 r- J% R. D" c
容错能力强
4 t$ x5 b( G) ~, ]+ C
: L% H5 f6 m  X4 a9 S3 K译码可靠性高
% J( t8 e. w% X/ _6 t% n' G, }+ H/ ^3 h2 ~# |  v
可引入加密措施. b9 Q7 Z& r. @7 U
. G0 K; \- m  A3 e$ M
成本低,易制作5 h3 k, L; J" b1 F& f  n- k3 |4 I

. v( r$ O4 e5 H& M$ k缺点
  _9 A$ r. u  u9 x8 ]& S二维码技术成为手机病毒、钓鱼网站传播的新渠道! n* p  }/ K9 ?4 ^' T1 d/ Q: h

3 [/ M6 a! a6 ]4 V5 t7 `, R信息泄密
/ p5 V$ a  M! x: K4 Y/ L$ L* W% U, n: f, N3 P
目前流行的三大国际标准
! {8 m5 ~8 e$ W; v% P, k) O, V0 x5 J, ePDF417:不支持中文$ s. x! [9 d0 f
- }  B3 i* P  y* _
DM:专利未公开,需支付专利费用
( n/ F1 d8 D9 ^5 P/ o) {4 D$ N( C  z6 r. O  h
QR CODE:专利公开,支持中文' J# G5 q" r6 g! a5 C7 ^
) R0 p7 b# ?8 k) o& U" d2 S2 t
QR CODE 纠错能力& u( {( `$ @$ r. ~" B
L级:约可纠错7%的数据码字
4 l6 m8 d! H5 K+ b& k3 u3 {) p& F' L3 e6 `3 V$ b; W9 E
M级:约可纠错15%的数据码字2 I$ i! ^* v* ^0 \3 B

1 z2 Q6 M& y* e: ^  f* I3 eQ级:约可纠错25%的数据码字
; v' c4 b& K' U4 A/ ]
+ z$ E6 y7 N1 F/ I/ r7 y9 YH级:约可纠错30%的数据码字5 l. ^, M: y1 m- e! p. [( t4 E- }

9 w  V  p7 M: k前提条件! {* ?9 {8 _- |
GD库
0 A* S; J( b0 I- R' _$ t
/ Q; i: ]% z* L9 v一、PHP生成QR CODE- D$ E, k; ]1 S/ W! i
官网:http://phpqrcode.sourceforge.net/
( u( _' P! g. @' ~! Q% _/ w! A
0 [4 A$ c& U1 Y: ~下载源码:https://github.com/endroid/qr-code5 b& i3 c" v  D- T

3 M$ E" T. j6 ?目录结构  O+ _, A# z7 I4 z

$ w$ x" W0 r. s! _2 K
) z2 K. c- ^6 e1 v( z+ ]5 M6 }! k1、qrcode_create.php
6 n9 W) m5 ~  z( m! Rps:生成普通二维码
4 L3 a: _* x$ d9 I

  1. 4 a8 |' M+ H% U$ Z! u  t8 f1 O
  2. include_once "./qrcode/phpqrcode.php";/**, N4 J6 ?; n8 S! ?. v, s. Y+ h9 v
  3. 5 y, |/ t) G' n
  4. * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径# R$ x  U' `2 M
  5. # D' {! h8 {* k$ P8 n, x9 o6 y
  6. * 在浏览器上直接生成一个二维码(内容为abc)# P0 J& o  M6 V# w) I
  7. 3 }' P# v2 I$ ]' U8 e
  8. */QRcode::png("abc");
    6 ]! j0 s5 P# _+ l) U) {8 D, W
  9. 4 n& x  p# ?, t9 t+ }% \1 L: S
  10. QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**& p3 d: a, h& |9 y/ W+ v: C

  11. ' n1 x+ R' q# A$ y8 F6 F* i, K
  12. * 生成文件到本地; E9 e( \$ v: C$ y; A, j" k6 z

  13. & t4 i( e8 h- L. s
  14. * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)- N/ h, H- f! u1 g7 c# A2 o2 \* {

  15. ' Q" G/ |' t! B* K
  16. * PS:$saveandprint源码的p6参数做了修改  J: A1 j8 |8 H  @% k& u2 E
  17. # @1 ~* L- K* M) ^7 R& |  O# ?& t
  18. */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);
    : U, }: K- G) H1 Q; d) S9 D
  19. $ L; n" y% Y/ N6 Z, g$ @0 K( D

  20. ) }4 B7 r* N, {
复制代码

0 t' W1 h# s6 k9 K* C$ {2 q8 J2、qrcode_logo.php/ C; r, e9 G- ~
ps:生成带Logo的二维码

  1.   V8 i5 l9 n; E8 a* t! h, ~- X
  2. /**  T  {" Z* [) K- J4 w
  3. 2 U0 e& U. }4 O( z" v
  4. * Created by PhpStorm.
    ) B! {) [0 g% P0 @; o: {

  5. " o! W$ n- M2 C* S, j7 G7 E6 F- M6 ?( R
  6. * User: user
    ) _' V. Y/ D4 k* ?' W
  7. 1 M) z) M, r, `/ d
  8. * Date: 2018/8/16
    + U0 Q7 O. |- t- c+ T: V% W

  9. ! \! m9 e4 e+ o9 L- V0 F
  10. * Time: 10:43
    " D  Z% e6 g- f' \' _- |0 Z$ ?
  11. 7 O7 `8 F, p9 w: E0 Y2 ~
  12. */include "./qrcode/phpqrcode.php";$txt = "测试内容";- k- Y1 F% g' m; T

  13. , N4 B2 @, I: U$ e
  14. $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称
    * v8 o6 P- B. X7 O

  15. ! z$ r# H( H0 X, D* `) C( H& _
  16. $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是
    . s# r. Q$ J7 M' [( P6 N
  17. % r4 U* k! h6 z: t; Q0 [
  18. $margin = 2;//边距
    9 D6 p" W4 I9 F+ g( G3 f

  19. 7 y4 f! |. v0 R
  20. $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片, |3 I; L/ O1 o1 T. n- i

  21. , q/ i, `% e; t  m) Y1 B) J2 i* l
  22. QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){   & z3 X/ R- I! f- p# g* y+ q
  23. # k  e, i; k& p6 ^5 L; z* h' M. x
  24. $QR = $picPathAndName; //已经生成的原始二维码图
    ) k9 z! i) x6 F' k  f) l& m
  25. ! Q* S  U' z% G  y# H- }) {2 {- _. R
  26.     $Logo = './pic/logo.png';   
    ! \) {1 C4 S" P$ c9 _

  27. ' w# B+ s) s* q1 v
  28.     $Logo_re = './pic/test_logo.png';   
    1 i1 w2 o+ k6 @# Q! l
  29. " [( ^# @# Q1 u  Z. ^1 c9 L
  30.     $QR = imagecreatefromstring(file_get_contents($QR));   
    % a/ i" p! b: R( y
  31. 4 V  e7 l" N( {, s
  32.     $Logo = imagecreatefromstring(file_get_contents($Logo));   . v# b/ `; ^) |4 ^( ]; M6 r1 q
  33. 4 G5 ]$ P% o3 T0 ]2 w4 g& b3 e
  34.     $QR_width = imagesx($QR); //二维码图片宽度' S* b- {, V) M
  35. & }8 m  ]: [& [( ]
  36.     $QR_height = imagesy($QR); //二维码图片高度
    + a2 U! p3 @' z) X

  37. / I4 L& {7 h" u5 z0 l
  38.     $logo_width = imagesx($Logo); //logo图片宽度3 i% ?4 K; t8 k. q! w; W: V

  39. * X8 K2 w5 S8 \8 Y" Z& h! W5 d
  40.     $logo_height = imagesy($Logo); //logo图片高度+ T$ r0 i8 J% K+ O2 h

  41. ' u4 f5 Q/ Y" M# y5 X) B6 A/ }
  42.     $logo_qr_width = $QR_width / 5;   $ E5 x' k5 r/ Z
  43. ) s( P; r9 M  Y9 q4 s
  44.     $scale = $logo_width / $logo_qr_width;   0 i# d- d6 `8 U( x9 j2 J0 E

  45. 7 k9 T: ]' w& v( X! O& I
  46.     $logo_qr_height = $logo_height / $scale;   * y8 [5 @/ X3 \- G- F
  47. , y4 D( A- o, R/ V
  48.     $from_width = ($QR_width - $logo_qr_width) / 2;$ C, K! c" |: ^! G3 E. _

  49. 3 l) \! I/ a! v5 r% @% R3 \
  50.     imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);   
    . k+ s% n) l0 i
  51. + M0 `( E# `% @  {4 P' N
  52.     //输出图片
    : T4 L) B* K0 `& _

  53. : `. J" S2 e, U; w5 P- P% G1 ^
  54.     imagepng($QR, $Logo_re);8 g6 Z* [* i6 G. v- C: B% K- j

  55. 7 g. q4 S5 X8 N4 S. ?- Q- J$ t
  56. }7 ?" N. B* s) |+ _0 e
  57. 5 \, D; e3 o" g8 W4 D; ?7 I6 f
  58. : H# T. M8 h7 o3 M; {+ r
复制代码
3、qrcode_vcard.php (生成电子签名)
' z4 k  w: p4 W5 K! m
3 P  w/ z" F$ Q& v. B4 hvCard格式:https://zh.wikipedia.org/wiki/VCard
( a; k# C* B0 q1 e0 a, v* w8 y5 |4 K4 ^4 e* h$ |
  1. ( D* P. s0 r1 V+ [7 k8 T
  2. * Created by PhpStorm.& k( G0 a; X- X4 z: s, G) R. t
  3. 5 j  |: Q- G2 ?
  4. * User: user( q- ^8 W. }* q; K* k' X3 `& M* c  J0 ~3 Q
  5. - \' ^3 n; b, A" [
  6. * Date: 2018/8/15
    ) d) U6 F& {9 g/ j6 `/ b& v

  7. % `8 k% t$ L# l
  8. * Time: 23:00% u. J. M" ^( V( v

  9. 8 b) A  ~, X5 Y, X/ {
  10. */require_once "./qrcode/phpqrcode.php";/**
    6 W2 G, V  J* U( {5 {
  11. & K. H4 y4 Z4 f5 L1 d- S+ R8 a' q
  12. * 生成电子签名  u6 T* i% f/ X: s6 |
  13. / \4 v3 ]- Y/ ~+ X
  14. * PS;使用微信扫描二维码( g2 _8 }7 e  j) U& \
  15. 0 ~* _1 T; C$ F6 u9 `
  16. */$content = 'BEGIN:VCARD' . "\n";//起始标志) B1 c6 U7 w/ k
  17. / M0 {$ q1 h' @; ]- I8 `
  18. $content .= 'VERSION:2.1' . "\n";//当前版本* ]  S& d+ C2 s

  19. ( |9 z4 ^- H0 K+ S& U
  20. $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名) c) F2 C9 o8 u) t

  21. 4 K( [, q% P4 O5 l
  22. $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称
    6 ?# {1 Z  E4 w3 D7 i6 e

  23. 2 v* a" f0 y0 w
  24. $content .= 'TITLE:PHP研发程序员' . "\n";//职位6 }  z! b- U% f
  25. # @) [( b  O- y6 [& p
  26. $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话
    0 B6 J5 O  a8 i* T+ Q5 |; t  M2 v2 a

  27. ) M7 u6 [5 Y+ _( L5 J9 J
  28. $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址" O) p8 r2 K( b2 g

  29. 0 z" _( }* M: F, z/ W  o1 @2 {
  30. $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)# v, F/ r* [  x. I+ T0 i
  31. ) m8 ~1 N3 [, \0 ~+ X8 ]
  32. $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话! S# A$ @1 y) \5 K- _' ]: q

  33. ' O- O$ g. h7 E+ B# x! G. J+ D; E
  34. $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱
    * E5 E& b. }) `- g

  35. ! V1 L9 x0 ^- R! u
  36. $content .= 'URL:www.baidu.com' . "\n";//个人主页
    ' j" v- ^5 _6 p/ l

  37. % P3 p2 J! |; s$ o# c( {
  38. $content .= 'END:VCARD' . "\n";//结束标志
    % b* V( S4 }+ a, T
  39. 1 K) c5 a2 `4 |/ g$ ~7 }( [! q- t
  40. QRcode::png($content);
    3 Q7 F1 s) [) S& A* [

  41. 6 c& A/ |8 ?* g, @
  42. / `+ p4 o  _3 Z& p
复制代码
1 ?% Q; ?1 Q% c3 h0 J2 d9 D) V
相关文章推荐:- P3 l- J; s" }2 {' B
1.PHP生成微信二维码实例
" O1 a. n0 u( K9 a  _' F- i2.php网址转换生成二维码$ m- `+ {9 }0 r) q
相关视频推荐:
. E. c2 X" }( H9 t' E" a3 s1.独孤九贱(4)_PHP视频教程% S# h" w, {9 a. A# T
二、JQUERY生成QR CODE' Y3 A, f' l) |) G
源码地址:https://github.com/jeromeetienne/jquery-qrcode
* v# @- g( K: ?6 j4 p" f
. {+ g; q/ t( M7 w- O8 k, ljquery_create.php
, q7 ^* U5 Z/ g2 V3 a: F# M; i; b/ {' A3 n/ S' v* i4 [9 O
  1. <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码
5 C2 b# g  R7 X! S" |% ]* q
三、PHP识别二维码. @5 x# y8 n3 n
1、方法一
  A( m# \+ }4 k环境需求,安装如下扩展0 \- P( B) `$ U8 k% r! ?1 U+ [+ h
- ImageMagick1 ?# p+ U. B; P0 ]2 m
- zbar
  E. {1 _9 T2 G, W2 X- php-zbarcode5 O7 h0 ^2 |1 _+ |, w; v

' X9 l1 v/ n/ Y3 Z2、方法二
4 [3 B4 H! |' ?7 Q& P* GPHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以
. S: O0 E: O% K. D. i3 sqrReader类:https://github.com/baagee/php_QrReader
6 p3 y# r6 s6 s6 r6 @, p2 x/ }9 P- J2 q, Y5 s
  1. ) L7 n& x. O- {, ?
  2. $qrcode = new QrReader('./test_logo.png');  //图片路径9 A5 r1 V# P  y! R' W9 @
  3. 6 U  {5 Z+ M8 [! _
  4. $text = $qrcode->text(); //返回识别后的文本
    9 {3 n4 _7 {1 t8 _: c, ^$ r
  5. : E9 c1 d5 V& A* ^
  6. echo $text;
    ( T" d, r: `( d6 w
  7. . ^8 e3 y8 s. i9 J8 H( W7 |3 F
  8. 8 l/ p2 \: t0 H: I; x( T
复制代码

8 v# r. A8 Q, Q1 w+ X$ U链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y7; i9 h) k3 w0 ?0 D

) E" p/ c2 W6 {' M
5 s; r6 r9 i4 k5 P2 [7 v8 m9 E& a/ a6 X6 ]# `

+ X+ L0 j" x" t
7 Q0 b& H2 r% o  t- d$ u. G2 n! C
8 B/ \, x6 a# H0 `) s
  Q9 z3 |' ~% a& p" h2 [

/ k+ {, G* ]4 S, h




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