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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 16667|回复: 0
打印 上一主题 下一主题

[php学习资料] PHP如何实现二维码的生成以及识别(代码) ------------------...

[复制链接]
跳转到指定楼层
楼主
发表于 2020-7-24 00:09:21 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本篇文章给大家带来的内容是关于PHP如何实现二维码的生成以及识别(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
5 a( c& d+ w( g" j  B; M---------------------------------------------------------------------------------------------------0 X+ e* j2 }9 F" }# `
二维码的分类/ k. l5 s/ y' g$ H
线性堆叠式二维码. c- X2 @; K& L
; I8 T% G! H9 W6 b/ i$ ]$ r
矩阵式二维码
7 V0 O0 h+ P3 U* R/ t- U  u
) X) G& [- m) D! |二维码的优缺点
" o) U" t9 o7 r优点
+ _8 T% K6 w, i3 S/ }1 M" f信息容量大
) S( O# o% h7 W2 [/ c
6 U1 K' \$ k% H- H编码范围广+ _/ n" E. Y$ P. D+ [6 z% L. ?! o
8 d! U0 ], A6 a6 y+ m
容错能力强3 s$ `* M  [  V$ q
7 W1 {" G1 R/ C  t, c% o
译码可靠性高( S5 g$ c2 Z5 X; M' n$ x8 G8 M
5 P" h* \+ N0 L% A, `
可引入加密措施
0 [+ O1 d2 m( \/ U
' f1 g, @. `. n成本低,易制作
. z. x& w9 F9 Z0 d4 v. p7 k  e% @5 G% O
缺点
' F. M' F/ l0 t# A0 s! m二维码技术成为手机病毒、钓鱼网站传播的新渠道
) n. |0 {, x! v+ s
* [8 D, Y' C& M* p信息泄密
5 \. A$ u' F3 X3 y. e! `9 F8 D7 E; K6 r, w  D
目前流行的三大国际标准3 X% M: j6 ?: |5 f3 y* b
PDF417:不支持中文
' Q) \+ a/ ~5 b& N" u! i4 {: ^! I- G/ {
DM:专利未公开,需支付专利费用
7 p( K, G+ M* P$ [, r
! i2 I2 y" w2 V" i- y/ IQR CODE:专利公开,支持中文. O/ K$ ?3 n/ r5 c7 X3 ?, M
( p1 Y, X5 v; A: @
QR CODE 纠错能力3 Z' U- J9 @  c' U; O  R2 l5 A
L级:约可纠错7%的数据码字+ a: [. V$ i( f$ c2 c

  n, h( g: t# P" p+ g4 B- t6 x9 Y" u- k: }M级:约可纠错15%的数据码字
  \9 n# v: g% l3 _' ]& B7 S" b
0 |" g" h' m8 ?5 s, o7 H" i. OQ级:约可纠错25%的数据码字
  C/ J7 A5 p" @" \4 b* A7 D+ _$ \" R4 O& u
H级:约可纠错30%的数据码字4 d; U( o+ u: c

$ O: x( O; L" e# d2 R" [5 _" D. k前提条件6 N* B) t5 X+ E
GD库
5 ^0 L0 u) d$ S1 k; w5 |, l' `' n7 v6 p! @7 }9 i9 T
一、PHP生成QR CODE
+ B( n6 ?* t! p0 p官网:http://phpqrcode.sourceforge.net/% H0 N" `, W5 A0 p! p

  O' k- \/ z9 v5 {; ^* V下载源码:https://github.com/endroid/qr-code% G$ m8 N4 g" a( g

* Y, z: x& k" w" |1 ?- E目录结构% [) g( `+ G5 w7 q& ]5 ?4 n
' N0 X$ p& y3 I- g  D5 A5 L- {2 O  V
9 D* v- P5 S, ^: W2 D
1、qrcode_create.php$ {. Z; u# @7 o7 ?: H
ps:生成普通二维码% o1 u! h6 p) ^

  1. * e4 C: S" _* c- s8 X9 b( h$ |. x% \
  2. include_once "./qrcode/phpqrcode.php";/**
    ; n' i( o# c( s0 }$ ]# Z
  3. # d, |" @9 \& E
  4. * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径. P' u: g2 d/ Q% E; |% J9 s/ x- c
  5. 9 T1 u0 c. G7 G+ |0 ]- m
  6. * 在浏览器上直接生成一个二维码(内容为abc)
    , W; p0 X. e, Z( Z5 Y

  7. 4 @$ q! O1 g: a* z  h$ Y
  8. */QRcode::png("abc");
    - n+ k' @% o! ]" O
  9. ! B9 ]+ E7 L( a  j' @
  10. QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);/**
    , I# |3 P: ?* z+ F2 [/ c/ y" P
  11. 7 u* |3 C4 P+ d
  12. * 生成文件到本地, z5 h$ I1 a; H& `* n4 z

  13. 7 E9 o+ z7 h6 u! c
  14. * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)
    " g+ D! y  b1 m5 F: e

  15. 5 q% J+ _% Y8 R1 g2 [
  16. * PS:$saveandprint源码的p6参数做了修改
    ( N$ N8 m# W8 I/ O9 w  O8 o' ]
  17. " [& L5 x& H" m! f5 W2 g  |
  18. */QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);9 c, x: A7 Z$ l" V

  19. 3 Y' W$ X8 a$ t6 `: N
  20. 9 U3 E) `; S: J, b& t
复制代码

0 z0 p8 s; g) j4 @' J2、qrcode_logo.php8 ~5 z9 g% C7 J
ps:生成带Logo的二维码
  1. - D0 Q+ j. ?- X: q$ }
  2. /**
    ' n' |1 w3 u( X: |. x! D4 ]+ S

  3. 1 H$ I1 R! w8 [# m1 W$ R. n" l
  4. * Created by PhpStorm.
    * z7 @0 E9 t* t
  5. . m1 R, G8 z  `* r* |
  6. * User: user( T. u9 J7 S  N; D, U

  7.   ]! K) Y9 X) u$ {
  8. * Date: 2018/8/16
    / e8 c" p% t! n6 y/ w/ W: u
  9. 0 f5 V$ f/ F+ ^5 `- s8 U! u- U
  10. * Time: 10:43* S$ l3 x" @! \$ c( a4 L2 O1 c; A
  11. 2 v8 j6 x- @9 G2 j1 B6 V
  12. */include "./qrcode/phpqrcode.php";$txt = "测试内容";4 u& L# ?; e0 t4 A9 k
  13. & t; Y% G/ J; j8 G
  14. $picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称
    , h& m/ n4 L5 U  ^2 N
  15. - g) H( W: f2 z" u+ H6 H, f3 M, w
  16. $level = 'L';$size = 5;$is_logo = 1;//是否包含Logo 0否 1是
    6 g$ `3 G( G4 g+ D* a5 w' {

  17. * p2 ~$ G. |3 G! ~$ A+ t$ D6 \
  18. $margin = 2;//边距' ^8 t; M8 F: r: ?

  19. 2 Z7 f, U7 \* ~
  20. $saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true//生成二维码图片
    2 h& e2 l# |1 Q) F

  21. & Q7 [! m8 r! k4 F# O
  22. QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);if($is_logo == 1){   9 l2 G' Q6 G% R

  23. 5 t& u# T+ J0 r  p6 d  k
  24. $QR = $picPathAndName; //已经生成的原始二维码图4 D0 w% e3 T% g4 L
  25. 3 V3 O, B# c" \) @) ?# S
  26.     $Logo = './pic/logo.png';   
    # o' T* c1 \) x% u/ Q, V# }

  27. ( l3 i) i4 Z; t7 s' e: r: y2 z6 c; r
  28.     $Logo_re = './pic/test_logo.png';   
    ! V! C; O! z6 S$ N' C6 Y

  29. $ Q$ J- E2 D& I! }* i
  30.     $QR = imagecreatefromstring(file_get_contents($QR));   4 r  ~- U: M" y
  31. # h. h% K3 n$ Q3 `
  32.     $Logo = imagecreatefromstring(file_get_contents($Logo));   - ?/ e% y  l: B0 R/ S4 O
  33. % [9 c5 E6 S9 t
  34.     $QR_width = imagesx($QR); //二维码图片宽度3 C7 c: z6 m5 u& a, D0 m
  35. $ [8 |+ N/ x0 u; A
  36.     $QR_height = imagesy($QR); //二维码图片高度
    0 O* D% T, J+ j0 R
  37.   k- P4 g: f( o$ q
  38.     $logo_width = imagesx($Logo); //logo图片宽度5 n4 d! \6 g" O: t$ }- h

  39. 2 U- {0 ~7 n  g; U* n/ X- ~
  40.     $logo_height = imagesy($Logo); //logo图片高度
    2 r6 m# @8 l5 k$ ]5 K
  41. - N$ @$ d  f. r  c9 p9 y
  42.     $logo_qr_width = $QR_width / 5;   
    + B+ K$ A! o, P  z9 {: r1 L" [1 Q

  43. , X" s7 X: v* x- e* z; H# k5 t
  44.     $scale = $logo_width / $logo_qr_width;   
    7 J1 C9 c% @" I2 M/ s
  45. 7 g4 ~; H5 t- Y1 T+ S
  46.     $logo_qr_height = $logo_height / $scale;   3 ?$ I' p1 l) B" Q+ i
  47. 2 n( z' x7 T; A. Y, G9 R7 V
  48.     $from_width = ($QR_width - $logo_qr_width) / 2;
    , I, F) }0 O1 O; Z

  49. ! e! b9 v0 @) {8 Y1 d
  50.     imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);   
    4 S2 O! B. \0 v. x
  51. # p2 Y, V" M& g& F+ Z
  52.     //输出图片2 T" }+ r1 @: I7 i
  53. ; {& g5 h# f! e( Y6 {
  54.     imagepng($QR, $Logo_re);
    9 A: u. }/ G6 H$ ]/ P' {& s5 \
  55. # ]" p4 ]- X6 |) M4 @/ N0 a
  56. }6 B" `  ~: {8 Q& T% E

  57. + O1 b" O: R8 V# M
  58. 3 s+ m( u- B5 J6 |: U+ g
复制代码
3、qrcode_vcard.php (生成电子签名)
/ n, N1 e$ ]# v% @, F% ?- T1 I& \/ C4 W  S8 K: x
vCard格式:https://zh.wikipedia.org/wiki/VCard. a4 w5 v/ V; O
7 x" n0 B* |' G% u- G7 B2 ^4 Y
  1. ( H* b+ h( A: x& b, L" t
  2. * Created by PhpStorm.
    ) r8 K8 Z4 }3 p0 D6 p, h

  3. " s$ _% f1 u( `5 a( ?) s2 T
  4. * User: user* o! S# v! j) y' j
  5. : ~1 t5 x7 ?# M. k# Z: N3 R
  6. * Date: 2018/8/15. G0 q2 G- I. T. U* l5 b
  7. - {5 g5 ?; b) h5 k/ [3 T1 d7 l( u
  8. * Time: 23:00
    / k% k1 q& H1 y) H. N9 e" F
  9. ! X9 M6 O  C+ z  U' N! H: w
  10. */require_once "./qrcode/phpqrcode.php";/**
    , m. {+ `7 H( K, L4 P

  11. 4 z. c+ E7 n8 h3 |
  12. * 生成电子签名
    ( Z! p) ?* ^, v; X4 h% J; [
  13. 2 ]' P! h8 \: x2 E* z# h$ B/ z
  14. * PS;使用微信扫描二维码# ?3 b& L" t# r' h* X/ b9 g1 ^! g
  15. , U% V/ {2 ?8 S0 D4 w! [
  16. */$content = 'BEGIN:VCARD' . "\n";//起始标志$ |2 r9 h/ l3 {# s0 ?

  17. 7 _' j& M/ A7 y7 j; G  f
  18. $content .= 'VERSION:2.1' . "\n";//当前版本- R4 Y% y! i7 i& c7 n+ v# j

  19. * c; [# N; q9 q7 t% m1 V& R; ?
  20. $content .= 'N:周' . "\n";//姓$content .= 'FN:勇' . "\n";//名
    0 X8 y. ^6 ?% T+ y3 c* l; L' r6 E
  21.   |3 U) b4 ^1 J  F
  22. $content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称
    7 J4 r3 `" K6 S+ |8 R
  23. " ^, S  ?2 q. L; F9 z5 M
  24. $content .= 'TITLE:PHP研发程序员' . "\n";//职位( U* R( c$ d7 S5 ^. y5 o/ Q/ {

  25. 3 T! E. r$ e9 l. k
  26. $content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话2 K- s/ Y. \6 m  G$ O. _# `

  27. ) S! y- n2 i. C5 B# L, k
  28. $content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址
    $ E8 c) h; k- t# ]* U

  29. 0 c2 a: F" t2 S3 Z/ U# L. u
  30. $content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)
    6 M; {# i+ }; i: ~; o2 [$ d& Q
  31. % U9 a7 z/ z: {. V# j! b# h
  32. $content .= 'TEL;TYPE:18000001111' . "\n";//移动电话% Y. H5 {8 O& J4 v

  33. 2 h# J! W( b, e6 e) ?- F5 ?
  34. $content .= 'EMAIL:123456@qq.com' . "\n";//邮箱
    / Y2 \9 j) ^9 @/ A% z+ f2 v' z
  35. - U7 D" ]" r0 J5 P' U" t# s
  36. $content .= 'URL:www.baidu.com' . "\n";//个人主页
    7 |! R0 z1 e. I1 q: e
  37. 1 D2 f$ a$ }, D1 U& E2 Q0 C# ?
  38. $content .= 'END:VCARD' . "\n";//结束标志
    8 ^( k; \  i7 m) Y

  39. ; U, m: P6 O3 E9 h
  40. QRcode::png($content);% x/ b' U! v) e2 `3 R" ^3 B
  41. 9 e4 w8 G5 g) y

  42. ! k/ \& T; f9 [9 y5 {, X
复制代码

1 y7 K/ r0 p* x. H相关文章推荐:
# Z6 N9 S' v! T9 Q6 d+ ^1.PHP生成微信二维码实例
) ~7 [2 _4 Y" W+ U2.php网址转换生成二维码
# X) N, Q9 [6 F" ]5 {相关视频推荐:; `9 y( k% C1 S( s! Z& P
1.独孤九贱(4)_PHP视频教程  [' r4 P' s9 @/ A4 f' n* e0 W# H
二、JQUERY生成QR CODE" T9 A" X  G* k$ P7 {2 h* j$ M
源码地址:https://github.com/jeromeetienne/jquery-qrcode
' v- {! S. K& m* }4 c+ n* p7 B3 k% _" _9 b: l  j
jquery_create.php
# }7 _0 S: C, `/ w5 j7 J. j+ f! U' z% U1 H% C3 l( @# P
  1. <blockquote><font color="#000000" face="Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif"><!DOCTYPE html><html lang="en"><head></font>
复制代码
5 q& J3 M+ Z6 |5 M5 l; M+ Q; \
三、PHP识别二维码) W* Q% s& R7 B
1、方法一
- Q; B0 k2 O" n8 q0 S环境需求,安装如下扩展5 I+ a- s# K9 }( ?, a' W8 t
- ImageMagick
8 _8 B# B; `0 ]* U  {- zbar3 }; n! w4 C  p  N  O* t
- php-zbarcode9 \8 H. ^9 j- e7 W) G6 }
, n, `  D( J7 K, ^/ \* m
2、方法二
1 S. d% O. H' j; D5 f% FPHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以
( w# i/ _# g: I# P/ L2 BqrReader类:https://github.com/baagee/php_QrReader; f8 }; h! O0 k% v' r
! d, j  p+ K% \& U2 c' f
  1. 6 v" Y  p% q4 M1 ~4 |% N
  2. $qrcode = new QrReader('./test_logo.png');  //图片路径
    & _" _  |4 L& W* T4 k1 w' M2 d/ O1 o
  3. : Y  g; B& `) |% i8 s
  4. $text = $qrcode->text(); //返回识别后的文本
    4 t+ g9 o9 q4 J  f' V

  5. 2 u5 B# M, m5 G/ a$ N+ p5 j& i
  6. echo $text;
    ' ?) m' s' r$ W

  7.   l! b3 w$ {/ P/ p  q
  8. 6 ~( `5 I* ~8 W4 A' B" [
复制代码
; d# O, e# J, i4 @8 ^: V- ~! ~
链接:https://pan.baidu.com/s/1icpWRjIQiXdCXeOc52pNSg 密码:c5y70 e$ F  A# f. q' R

5 {1 }2 r1 w  @( n. B# b) U2 T" f; k( s: E7 F2 w

4 O' a$ U& Q  n* i
" ]4 o6 y5 C) ^9 l7 }; k
3 ?+ U' y- v6 u/ @
8 D  I! Z" ?/ e8 V: {; E- Y" n* N4 f: c0 d! l1 p
- [% z' ?& i/ b# E

. t; }0 ^9 ?  @
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 17:11 , Processed in 0.077848 second(s), 22 queries .

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