Về Code kiểm tra MST của Mr Okebab -nhờ giải thích

  • Thread starter Thread starter TKT
  • Ngày gửi Ngày gửi
Liên hệ QC

TKT

Thành viên tiêu biểu
Tham gia
2/1/08
Bài viết
673
Được thích
1,336
Nghề nghiệp
.....
Code này dùng kiểm tra Mã số thuế bài do anh Okebab gửi:

Function
MSTCheck(MaST As String) As Boolean
Application
.Volatile (False)
If
Len(MaST) < 10 Then Exit Function
MaST = Mid(MaST, 1, 10)
Dim SKT As Double
SKT
= CDbl(Mid(MaST, 1, 1)) * 31
SKT
= SKT + CDbl(Mid(MaST, 2, 1)) * 29
SKT
= SKT + CDbl(Mid(MaST, 3, 1)) * 23
SKT
= SKT + CDbl(Mid(MaST, 4, 1)) * 19
SKT
= SKT + CDbl(Mid(MaST, 5, 1)) * 17
SKT
= SKT + CDbl(Mid(MaST, 6, 1)) * 13
SKT
= SKT + CDbl(Mid(MaST, 7, 1)) * 7
SKT
= SKT + CDbl(Mid(MaST, 8, 1)) * 5
SKT
= SKT + CDbl(Mid(MaST, 9, 1)) * 3
MSTCheck
= (CDbl(Mid(MaST, 10)) = 10 - SKT Mod 11)
End Function

Nhờ các anh/chị giúp hiểu đoạn code trên. (dòng màu đỏ ấy)
Sử dụng mà không hiểu thì ngủ không ngon.
Xin chân thành cảm ơn!
 
Lần chỉnh sửa cuối:
Có lẽ bạn thắc mắc về CDbl ?
Theo tôi biết thì code này dùng để đổi kiểu biến thành Double
Chắc nó tương đương với Dim SKT As Double
(Tôi chỉ biết tàm tạm thế)
 
Upvote 0
Code này dùng kiểm tra Mã số thuế bài do anh Okebab gửi:

Function
MSTCheck(MaST As String) As Boolean
Application
.Volatile (False)
If
Len(MaST) < 10 Then Exit Function
MaST = Mid(MaST, 1, 10)
Dim SKT As Double
SKT
= CDbl(Mid(MaST, 1, 1)) * 31
SKT
= SKT + CDbl(Mid(MaST, 2, 1)) * 29
SKT
= SKT + CDbl(Mid(MaST, 3, 1)) * 23
SKT
= SKT + CDbl(Mid(MaST, 4, 1)) * 19
SKT
= SKT + CDbl(Mid(MaST, 5, 1)) * 17
SKT
= SKT + CDbl(Mid(MaST, 6, 1)) * 13
SKT
= SKT + CDbl(Mid(MaST, 7, 1)) * 7
SKT
= SKT + CDbl(Mid(MaST, 8, 1)) * 5
SKT
= SKT + CDbl(Mid(MaST, 9, 1)) * 3
MSTCheck
= (CDbl(Mid(MaST, 10)) = 10 - SKT Mod 11)
End Function
[SIZE=-0]Tên hàm:
CDbl

Mô tả:
CDbl (expression)
Chuyển đổi biểu thức expression sang kiểu Double

Tham số:
expression
Biểu thức cần chuyển đổi

Ví dụ:
Option Explicit
Private Sub Form_Load()
Dim MyCurr, MyDouble
MyCurr = CCur(234.456784)
MyDouble = CDbl(MyCurr * 8.2 * 0.01)
End Sub
Nguồn: caulacbovb
[/SIZE]
SKT=Mid(MaST, 1, 1) * 31 cái này dễ hiểu.
SKT=SKT+... ie cộng dồn
MSTCheck = (CDbl(Mid(MaST, 10)) = 10 - SKT Mod 11)
ie Số thứ 10 chính là số mod(SKT,11) nếu không bằng là sai.
 
Upvote 0
Trong đa số các trường hợp, hảy đặt con trỏ chuột tại ký tự mà ta đang thắc mắc rồi F1, sẽ có giãi thích rất rỏ ràng!
(Có thể máy sẽ báo phần Help chưa dc cài đặt và yêu cầu cho đĩa CD vào)
 
Upvote 0
Hàm này là do em viết các đây 3 năm rùi. Ai có cách nào viết lại hay hơn xin chỉ giáo.
(hồi đó còn ngu ngơ, bây giơ chỉ còn 1 chữ ngu)
Bác Bắp thêm vào: Application.Volatile (False)
Còn lại bác có gì thắc mắc em sẽ xin giải thích, nhưng những gì 2 bác Thunghi và Ndu chắc là cũng đủ cho bác.
 
Upvote 0
Còn lại bác có gì thắc mắc em sẽ xin giải thích
Anh Bình ơi! em chưa hiểu ý nghĩa của Đoạn code này, dùng để kiểm tra mã số thuế như nào?
Tại sao phía cuối phải nhân với 31 rồi 29,23....

Các bác giúp em
 
Upvote 0
Theo quy định của BTC về việc lập MST thì chữ số thứ 10 trong MST sẽ là mã kiểm tra với toàn bộ phần còn lại của MST. Luật là
- Lấy những con số của MST từ số thứ 1 đến số thứ 9 lần lượt nhân với các số nguyên tố 31, 29, 23, 19,17,13,7,5,3 rồi cộng lại, hình như người ta đã chứng minh được là số này không thể nào là một số chia hết cho 11 (cái này nhờ ai đó kiểm chứng hộ)
- Vậy nên lấy kết quả cộng dồn chia cho 11 sẽ có số dư từ 1 đến 10 (không thể có số dư là 0 do không thể chia hết cho 11 như đã nói)
- Tiếp theo lại lấy 10 trừ đi kết quả phép thương lấy dư để ra chữ số thứ 10 chỉ có 1 chữ số (từ 0 đến 9)

Vậy nên trong một MST nhờ chữ số thứ 10 người ta kiểm tra xem MST đó có được ghi một cách đúng đắn hay không. Nếu ghi sai thì thường sẽ không có số đúng.
 
Upvote 0
Cám ơn anh Bình
em còn một tí tẹo điều muốn hỏi thêm nữa là
-Trong hàm Mid(a,b,c) em ko thấy c ???
MSTCheck = (CDbl(Mid(MaST, 10)) = 10 - SKT Mod 11)


Và em có dùng hàm MSTCheck này để kiểm tra mã số thuế ví dụ 0200109572
=MSTcheck(0200109572) = MST(200109572) = False
Tại sao vậy anh nhỉ?

 
Upvote 0
Cám ơn anh Bình
em còn một tí tẹo điều muốn hỏi thêm nữa là
-Trong hàm Mid(a,b,c) em ko thấy c ???


Và em có dùng hàm MSTCheck này để kiểm tra mã số thuế ví dụ 0200109572
=MSTcheck(0200109572) = MST(200109572) = False
Tại sao vậy anh nhỉ?

[/color][/color][/color]

PHP:
MSTCheck(0200109572) = True
MSTCheck(200109572) = False
Hai chuỗi ký tự này hoàn toàn khác nhau. Thử lại nhé.


attachment.php


Thực ra mình cũng chưa đọc được một văn bản pháp quy nào về cách tạo ra 1 MST cả. Ai có không chỉ cho cho mình nhé.


Thân!
 

File đính kèm

  • MST.JPG
    MST.JPG
    116.8 KB · Đọc: 113
Lần chỉnh sửa cuối:
Upvote 0
Anh ơi!
Trong mục nào mà ta chỉ cần gõ MST thì sẽ ra thông tin về doanh nghiệp như đoạn trên vậy?
Em lò dò mãi không ra?
-----------------
Em làm được rồi! Thanks nhiều
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom