Tải hóa đơn điện tử (https://hoadondientu.gdt.gov.vn/) Excel Vba

Liên hệ QC

ongke0711

Thành viên gắn bó
Tham gia
7/9/06
Bài viết
2,230
Được thích
2,950
Giới tính
Nam
Chào các bạn,
Tôi ngồi mò mẫm mấy ngày mới tìm được cách tải hóa đơn điện tử từ trang https://hoadondientu.gdt.gov.vn/. Cách này có thể không chuyên nghiệp nhưng cũng giải quyết được vấn đề tải hóa đơn hàng loạt từ trang trên và ghi xuống Excel theo định dạng dễ tổng hợp dữ liệu sau này.
- Tốc độ không nhanh như các ứng dụng python siêu nhanh.
- Chưa tìm được các link tải file .xml hoặc .html
- Chưa trải nghiệm qua các định dạng hóa đơn điện tử của các nhà cung cấp giải pháp khác nhau nên sẽ không đảm bảo chạy đúng 100%.
- Chưa biết cách tích hợp code vượt Captcha của (Python, C#..) vào VBA nên phải nhập Captcha thủ công.
Nói chung cái tool cũng giải quyết được việc tải hóa đơn hàng loạt :D .
Tôi sẽ upload file demo không khóa (có khóa cũng như không) sau vì code còn lộn xộn lắm. Các bạn xem qua và đóng góp cách xử lý tốt hơn, gọn hơn nhé.



*** 12/10/2024: Cập nhật sửa một đống lỗi.
*** 15/10/2024: Cập nhật sửa lỗi Null và nhập ngày tháng.
*** 16/10/2024: Thêm tính năng lưu User/Pass.
*** 20/10/2024: Sửa lỗi hiển thị ngày tháng, sửa và thêm một số code phụ trợ.
*** 28/10/2024: Sửa lấy hóa đơn từ máy tính tiền.
*** 07/11/2024: Sửa code trích xuất dữ liệu, thêm cột so sánh.
*** 13/11/2024: Dùng code của bạn Hesanbi để tự động nhập Captcha. Thêm code lấy link tra cứu của VNPT và BKAV.
 

File đính kèm

  • TaiHoaDonDienTu_v4_luuUserPass.xlsm
    264.1 KB · Đọc: 71
Lần chỉnh sửa cuối:
Để bác ấy mò xong mấy cái cơ bản đã bạn.

Trong mỗi file xml sẽ có mã số thuế của tổ chức giải pháp, viết tắt mình nhớ không nhầm là msttcgp, đây là đơn vị trung gian phát hành hóa đơn.
Tiếp theo bạn tìm mã tra cứu, nó cũng gần quanh quanh chỗ msttcgp thôi.
Lấy từ json nó sẽ là trường: "msttcgp" và "cttkhac""dlieu"
 
Upvote 0
Dữ liệu API và XML là giống hệt nhau, từ dữ liệu API viết mã tạo tệp XML, thay vì tải zip. Bạn có 10k hóa đơn, nếu bạn tải về máy tính của bạn thì chỉ tốn kém. có 2 cách để giải quyết vấn đề tải zip để tiết kiệm cho việc tải:
1. Tải zip sau khi bạn lọc danh sách ít hóa đơn.
2. Từ Dữ liệu API tạo ra xml/html.
Cái ý 1 thì mình khỏi bàn. Cái ý 2 thì mình không rõ là khi tạo ra được 1 File XML từ API => cung cấp cho cơ quan thuế => họ đưa vào ứng dụng của thuế nó có đọc được hay không thì cái này mới là quan trọng (vì ứng dụng này chỉ nội bộ của cơ quan thuế), vì có 1 lần mình cũng tạo ra 1 file XML từ DATA có sẵn nhưng khi cho vào ứng dụng của cơ quan thuế thì nó báo lỗi "Cấu trúc tệp không đúng quy định" (có thể do kiến thức mình không đủ để tìm được nguyên nhân nên từ đó là mình đi đường vòng: lấy File XML chuẩn từ hệ thống thuế rồi chỉ thay các giá trị vào theo từng trường cho phù hợp )
 
Upvote 0
Vấn đề sau khi tìm ra mã số thuế Tổ chức giải pháp hóa đơn điện tử là phải có Link tra cứu
Tôi thấy meinvoice của Misa và một vài Tổ chức giải pháp cho phép tải về PDF mà không cần captcha hoặc xác nhận là con người.

Danh sách link tra cứu:

STT
Tên tổ chức
MST
Trang thông tin cung cấp dịch vụ hóa đơn điện tử của tổ chức
Link tra cứu
1​
Công ty TNHH Công nghệ Vĩnh Hy​
0314743623​
2​
Công ty TNHH Hệ thống thông tin FPT​
0104128565​
3​
Công ty Cổ phần Công nghệ tin học EFY Việt Nam​
0102519041​
4​
Công ty Cổ phần Đầu tư công nghệ và thương mại Softdreams​
0105987432​
5​
Công ty TNHH L.C.S​
0302999571​
6​
Công ty TNHH Soft Ware KK VAT​
0313963672​
7​
Công ty Cổ phần CyberLotus​
0105232093​
8​
Công ty TNHH Giải pháp công nghệ Ngô Gia Phát​
0311942758​
9​
Công ty Cổ phần Mắt Bão​
0302712571​
10​
Công ty Cổ phần công nghệ thẻ Nacencomm​
0103930279​
11​
Công ty Cổ phần Megabiz Việt Nam​
0105844836​
12​
Công ty TNHH Công nghệ LCD Việt Nam​
0312483391​
13​
Công ty Cổ phần MISA​
0101243150​
14​
Công ty TNHH Hóa đơn điện tử M-INVOICE​
0106026495​
15​
Công ty Cổ phần Phát triển công nghệ Nguyễn Minh​
0313906508​
16​
Công ty TNHH Phát triển công nghệ Thái Sơn​
0101300842​
17​
Công ty TNHH Máy tính và truyền thông công nghệ kết nối​
0306784030​
18​
Công ty Cổ phần công nghệ số và in đồ họa​
0200638946​
19​
Công ty TNHH Win Tech Solution​
0312303803​
20​
Tập đoàn Công nghiệp - Viễn thông quân đội​
0100109106​
21​
Công ty Cổ phần Công nghệ thông tin Đông Nam Á​
0102454468​
22​
Công ty Cổ phần hóa đơn điện tử New-Invoice​
0105937449​
23​
Công ty Cổ phần Giải pháp phần mềm 3A​
0108516079​
24​
Tổng công ty Viễn thông Mobifone​
0100686209​
25​
Công ty Cổ phần BKAV​
0101360697​
26​
Công ty Cổ phần phát triển phần mềm ASIA​
0101162173​
27​
Công ty Cổ phần thương mại Visnam​
0401486901​
28​
Công ty Cổ phần Thiết bị điện - Điện tử Bách Khoa​
0200784873​
29​
Tập Đoàn Bưu chính viễn thông Việt Nam​
0100684378​
30​
Công ty Cổ phần dịch vụ T-VAN HILO​
0106713804​
31​
Công ty Cổ phần Minh Khang Group​
0314209362​
32​
Công ty Cổ phần Giải pháp hóa đơn điện tử Việt Nam​
0101352495​
33​
Công ty Cổ phần giải pháp thanh toán Việt Nam​
0102182292​
34​
Công ty Cổ phần ICORP​
0106870211​
35​
Công ty Cổ phần đầu tư và công nghệ idocNet​
0104614692​
36​
Công ty Cổ phần chữ ký số VI NA​
0309612872​
37​
Công ty Cổ phần TS24​
0309478306​
38​
Công ty TNHH Hóa đơn điện tử TCT​
0315298333​
39​
Công ty TNHH Tin học Tia lửa Việt​
0303609305​
40​
Công ty Cổ phần phần mềm quản lý doanh nghiệp​
0100727825​
41​
Công ty TNHH ACCONLINE.VN​
0315467091​
42​
Công ty Cổ phần công nghệ hóa đơn điện tử HT​
0315638251​
43​
Công ty Cổ phần công nghệ ITT​
0105958921​
44​
Công ty TNHH PA Việt Nam​
0302431595​
45​
Công ty Cổ phần tích hợp công nghệ VNISC​
0103018807​
46​
Công ty TNHH Giải pháp hóa đơn điện tử My – Invoice​
0106820789​
47​
Công ty Cổ phần Chứng số An toàn​
0310151055​
48​
Công ty Cổ phần công nghệ San Phú​
0303430876​
49​
Công ty TNHH Giấy vi tính Liên Sơn​
0301452923​
50​
Công ty TNHH Thương Mại dịch vụ Online VI NA​
0314185087​
51​
Công ty Cổ phần dịch vụ viễn thông và in Bưu điện​
0100687474​
52​
Công ty TNHH Tuần Châu​
0400462489​
53​
Công ty TNHH Minh Thư​
3500456910​
54​
Công ty Cổ phần phát triển công nghệ ACMAN​
0104908371​
55​
Công ty TNHH Tư vấn thương mại Trí Việt Luật​
0315191291​
56​
Công ty TNHH Đầu tư Hòn Ngọc Việt​
0313844107​
57​
Công ty TNHH Dịch vụ Trí Việt Luật​
0311622035​
58​
Công ty Cổ phần truyền số liệu Việt Nam​
0106361479​
59​
Công ty TNHH NC9 Việt Nam​
0312270160​
60​
Công ty Cổ phần giải pháp First Trust​
0104493085​
61​
Công ty TNHH Phần mềm Nhân Hòa​
0101289966​
62​
Công ty TNHH Kế toán và tư vấn V.L.C​
0303211948​
63​
Công ty Cổ phần Công nghệ và giải pháp Tâm Việt​
0101622374​
64​
Công ty TNHH Dịch vụ phần mềm AVSE​
0310768095​
65​
Công ty TNHH MTV in Bến Thành​
0312961577​
66​
Công ty TNHH ZAMO​
0313950909​
67​
Công ty Cổ phần công nghệ VIETINFO​
0311928954​
68​
Công ty Cổ phần phát triển phần mềm và công nghệ Bitware​
0103770970​
69​
Công ty Cổ phần phần mềm Rosy​
0305142231​
70​
Công ty TNHH MTV thương mại dịch vụ Trần Đình Tùng​
3702037020​
71​
Công ty TNHH Tổng công ty Công nghệ và Giải pháp CMC​
0101925883​
72​
Công ty TNHH Công nghệ và tư vấn Phương Nam​
0316642395​
73​
Công ty TNHH Dịch vụ kế toán - Tư vấn thuế TTL​
0315194912​
74​
Công ty Cô phần Công nghệ Phát triển hóa đơn điện tử Việt Nam​
0315983667​
75​
Công ty TNHH Phần mềm kế toán và dịch vụ thủ tục thuế Sài Gòn​
0310926922​
76​
Công ty Cổ phần Phần mềm Thăng Long​
0101010702​
77​
Công ty Cổ phần Hóa đơn điện tử TIG Thăng Long​
0102720409​
78​
Công ty TNHH Viễn thông Đông Sài Gòn​
0314058603​
79​
Công ty Cổ phần Tin học Lạc Việt​
0301448733​
80​
Công ty Cổ phần Công nghệ TADU​
0313253288​
81​
Công ty Cổ phần Công nghệ UNIT​
0309889835​
82​
Công ty Cổ phần phát triển và ứng dụng phần mềm Bách Khoa​
0202029650​
83​
Công ty Cổ phần My Software​
0108971656​
84​
Công ty TNHH Công nghệ HT Sài Gòn​
0312942260​
85​
Công ty TNHH WEBCASH Việt Nam​
1201496252​
86​
Công ty TNHH Phần mềm và Tư vấn Kim Tự Tháp​
0303549303​
87​
Công ty TNHH Phần mềm BRB​
0311914694​
88​
Công ty TNHH Nhóm Mây​
0312617990​
89​
Công ty Cổ phần Hóa đơn điện tử VININVOICE​
0109282176​
90​
Trung tâm Tin học và Công nghệ số​
0102723181​
91​
Công ty Cổ phần VETC​
0106858609​
92​
Công ty TNHH Phần mềm PVS​
0315151651​
93​
Công ty Cổ phần Dịch vụ Thương mại Việt Nam trực tuyến​
0310151739​
94​
Công ty TNHH Ecount Việt Nam​
0312575123​
95​
Công ty Cổ phần ATIS​
0107732197​
96​
Công ty Cổ phần GMO-Z.com RUNSYSTEM​
0101659906​
97​
Công ty Cổ phần Tin học - Viễn thông Hàng không​
0103019524​
98​
Công ty TNHH Bizzi VietNam​
0316114998​
99​
Công ty Cổ phần Công nghệ BEE​
0316636497​
100​
Công ty Cổ phần MONT-E​
0106249501​
101​
Công ty TNHH Tư vấn và Dịch vụ Home Casta​
0201802839​
102​
Công ty CP Tư vấn và Chuyển giao công nghệ Sơn Phát​
4601328480​
103​
Công ty Cổ phần công nghệ KIOTVIET​
0104359717​
Bài đã được tự động gộp:

lấy File XML chuẩn từ hệ thống thuế rồi chỉ thay các giá trị vào theo từng trường cho phù hợp
Nếu bạn làm được điều này thì từ mục 2 tôi nói ở trên là khả thi.
 
Upvote 0
công ty trung gian phát hành hóa đơn
Phát hành hóa đơn có bắt buộc bạn phải mua hóa đơn bên tổ chức giải pháp không?
Nếu bạn đã có chữ ký số Remote thì bạn có thể tự phát hành hóa đơn tại Hệ thống hóa đơn điện tử không?
Hỏi chung là không cần tổ chức giải pháp, bạn có thể tự quản lý và phát hành hóa đơn tại Hệ thống hóa đơn điện tử không?
 
Upvote 0
svg nó có các ký tự định nghĩa cú pháp M L Q Z
Mã:
<path fill="#333" d="M110.37 35.20L110.31 35.14L107.99 28.36L108.04 28.41Q103.61 15.76 97.67 9.36L97.57 9.27L97.62 9.31Q99.68 10.42 102.26 11.02L102.20 10.96L102.34 11.10Q107.42 17.32 111.76 30.08L111.67 29.98L111.73 30.05Q114.81 21.97 115.50 20.38L115.55 20.42L115.51 20.39Q117.82 14.71 120.64 11.39L120.61 11.36L120.60 11.36Q122.74 11.06 125.37 10.18L125.42 10.23L125.41 10.22Q120.83 14.82 117.78 22.05L117.70 21.97L117.83 22.10Q116.27 25.60 112.58 35.12L112.74 35.28L112.70 35.25Q112.01 35.12 111.44 35.09L111.57 35.21L111.42 35.07Q110.99 35.20 110.41 35.24ZM115.48 37.72L115.32 37.56L115.31 37.55Q118.14 27.59 119.70 23.55L119.64 23.49L119.81 23.66Q122.67 15.82 127.08 10.95L127.12 10.98L127.11 10.98Q126.03 11.31 123.94 12.03L124.05 12.14L125.17 10.79L125.24 10.86Q125.73 10.09 126.34 9.44L126.45 9.55L126.44 9.55Q123.53 10.44 120.52 11.01L120.44 10.92L120.55 11.04Q116.06 16.25 112.18 27.71L112.23 27.77L112.25 27.79Q108.63 17.69 105.43 13.31L105.48 13.37L105.45 13.34Q104.95 13.14 104.07 12.99L104.22 13.13L104.23 13.14Q103.88 12.64 102.28 10.59L102.25 10.55L102.42 10.73Q99.38 9.93 96.68 8.52L96.57 8.42L96.65 8.49Q103.25 15.55 107.63 28.35L107.72 28.44L107.72 28.43Q108.96 32.11 110.14 35.69L110.11 35.66L110.08 35.63Q110.46 35.71 111.30 35.59L111.36 35.65L111.20 35.49Q111.56 36.20 112.25 37.53L112.21 37.49L112.34 37.62Q113.16 37.53 113.89 37.61L113.87 37.59L113.80 37.52Q114.59 37.58 115.35 37.58Z"/>
Đã tìm ra chữ "V"
 
Upvote 0
Phát hành hóa đơn có bắt buộc bạn phải mua hóa đơn bên tổ chức giải pháp không?
Nếu bạn đã có chữ ký số Remote thì bạn có thể tự phát hành hóa đơn tại Hệ thống hóa đơn điện tử không?
Hỏi chung là không cần tổ chức giải pháp, bạn có thể tự quản lý và phát hành hóa đơn tại Hệ thống hóa đơn điện tử không?
Thú thật với anh vụ này vĩ mô quá, bản thân em cũng không nắm được.
Nhưng nói chung để có thể đáp ứng cơ sở hạ tầng có thể truyền nhận thông tin với tổng cục thuế thì doanh nghiệp cũng phải có đội ngũ nhân viên phần mềm và hạ tầng phần cứng anh ạ. Như công ty em sử dụng VNPT để làm trung gian phát hành, hiện tại do nhu cầu muốn lưu trữ dữ liệu hóa đơn điện tử về sever công ty thay vì sử dụng của VNPT thì công ty cũng phải chi ra 1 khoản tiền khá lớn để đảm bảo hạ tầng. Nên đối với các doanh nghiệp vừa và nhỏ việc tự phát hành hóa đơn điện tử với thuế gần như là không có khả năng.
 
Upvote 0
Em có dùng thử tool này nhưng chỉ tải được hóa đơn từ phần "Đã cấp mã hóa đơn", còn phần "Tổng cục thuế đã nhận không mã" và phần "HĐ có mã từ máy tính tiền" thì không tải về được ạ
 

File đính kèm

  • 1728372987487.png
    1728372987487.png
    16.4 KB · Đọc: 42
Upvote 0
Em có dùng thử tool này nhưng chỉ tải được hóa đơn từ phần "Đã cấp mã hóa đơn", còn phần "Tổng cục thuế đã nhận không mã" và phần "HĐ có mã từ máy tính tiền" thì không tải về được ạ
Cái này chỉ cần đổi tham số txly thành 6, 8 là được. Chưa làm thôi bạn :) .
 
Upvote 0
Trong svg mỗi ký tự có 2, 3, 4, 5, 6 nét vẽ, tôi tạo một hàm trích xuất các ký tự như sau:

a = "MQQQQQZMQQQQQQQQQQQZMQQQQQQQQQQQQQQQQQQZMQQZ"
b = "MQQQQQQQQQZMQQQQQQZMQQQQQQQQQQQQZMQQQQQQQQQQQQQQQQQZMQQQQQQQQZMQQQQQQQQZ"
c = "MQQQQQQQQQQQQQQQQQQQQQZMQQQQQQQQQQQQQQQQQQQQQQQQZ"
d = "MQQQQQQQQZMQQQQQQQQQQZMQQQQQQQQQQQQQQQZMQQQQQQQZ"
e = "MQQQQQQQQQQQQQQQQQQZMQQQQQQQQQQQQQQQQQQQQQQQQQQQZ"
f = "MQQQQQQQQQQQQQQZMQQQQQQQQQQQQQQQQQQQQQZ"

Tôi chỉ giữ 3 ký mã M Q Z, vì M là bắt đầu vẽ, Z là kết thúc nét vẽ, Q là một cú pháp biểu thị vẽ đường cong, các cú pháp Q của mỗi ký tự là khác nhau nhờ vậy mà các ký tự trích xuất không có trùng.

Cho danh sách vào Dictionary và với svg mới chạy lại hàm trích xuất và tìm trùng.

Với 80 dòng mã là giải được. Tôi giải mẹo này chỉ mất 30 phút, mất 1 tiếng để chép đủ ký tự. Chỉ là một bài toán lập trình thôi, mọi cố gắng sẽ thành công bạn nhé.

Khi nào bí, tôi sẽ gợi ý bạn mẹo tiếp theo
Bài đã được tự động gộp:

Thú thật với anh vụ này vĩ mô quá, bản thân em cũng không nắm được.
Nhưng nói chung để có thể đáp ứng cơ sở hạ tầng có thể truyền nhận thông tin với tổng cục thuế thì doanh nghiệp cũng phải có đội ngũ nhân viên phần mềm và hạ tầng phần cứng anh ạ. Như công ty em sử dụng VNPT để làm trung gian phát hành, hiện tại do nhu cầu muốn lưu trữ dữ liệu hóa đơn điện tử về sever công ty thay vì sử dụng của VNPT thì công ty cũng phải chi ra 1 khoản tiền khá lớn để đảm bảo hạ tầng. Nên đối với các doanh nghiệp vừa và nhỏ việc tự phát hành hóa đơn điện tử với thuế gần như là không có khả năng.
Trước tôi có đọc qua bài viết tổng cục chỉ dẫn lưu trữ quản lý hóa đơn, cũng hơi phức tạp. Tốt nhất vẫn cần Tổ chức giải pháp, tiết kiệm chi phí.
Không biết khi dựa vào Tổ chức giải pháp thì có rắc rối hay nhược điểm gì không. Trước mắt tôi thấy nhiều thứ đều phụ thuộc vào họ.
 
Lần chỉnh sửa cuối:
Upvote 0
Khi nào bí, tôi sẽ gợi ý bạn mẹo tiếp theo
Nhờ hướng dẫn của anh @HeSanbi Em làm thử cái vượt qua CAPTCHA của hddt.
Anh @ongke0711 xem thử có dùng để ứng dụng đâu không nhé.
Phần code em có bổ sung thêm logic để có thể ứng dụng cho nhiều web khác nhau, cho phép mình tự lập thư viện mới.
Nếu thư viện đủ thì hiện captcha luôn, còn không thì sẽ tự bổ sung các ký tự thiếu, cho đến khi đủ ký tự (các anh xóa bớt phần dữ liệu trong sheet dic) Nhấn Get Captcha để thêm vào thư viện.
p/s: Update thêm nút refresh.
 

File đính kèm

  • Captcha_hddt.xlsm
    72.1 KB · Đọc: 45
Lần chỉnh sửa cuối:
Upvote 0
Nhờ hướng dẫn của anh @HeSanbi Em làm thử cái vượt qua CAPTCHA của hddt.
Anh @ongke0711 xem thử có dùng để ứng dụng đâu không nhé.
Phần code em có bổ sung thêm logic để có thể ứng dụng cho nhiều web khác nhau, cho phép mình tự lập thư viện mới.
Nếu thư viện đủ thì hiện captcha luôn, còn không thì sẽ tự bổ sung các ký tự thiếu, cho đến khi đủ ký tự (các anh xóa bớt phần dữ liệu trong sheet dic) Nhấn Get Captcha để thêm vào thư viện.
p/s: Update thêm nút refresh.
Dùng code vượt captcha thì nó thuận tiện hơn cách tôi đang dùng là hiển thị ảnh thông qua Web browser control. Có một số máy tính trình duyệt nó chặn nên phải thiết lập lại trong Internet Option của trình duyệt.
 
Upvote 0
Dùng code vượt captcha thì nó thuận tiện hơn cách tôi đang dùng là hiển thị ảnh thông qua Web browser control. Có một số máy tính trình duyệt nó chặn nên phải thiết lập lại trong Internet Option của trình duyệt.
Em đang cho hiển thị để mình có cái nhìn trực quan thôi, và thiên về tìm hiểu. Chứ sau khi quét đủ ký tự thì em làm mảng hằng (const) trong module luôn.
Xem đây như đó công cụ để mình ứng dụng lập thư viện cho dạng Captcha này.
trình duyệt nó chặn nên phải thiết lập lại trong Internet Option của trình duyệt.
Mình lưu về svg trong máy mà vẫn bị Internet Option hả anh, em nghĩ thuần túy hiển thị thôi thì chắc không bị kiểm soát chặt vậy.
 
Upvote 0
Em đang cho hiển thị để mình có cái nhìn trực quan thôi, và thiên về tìm hiểu. Chứ sau khi quét đủ ký tự thì em làm mảng hằng (const) trong module luôn.
Xem đây như đó công cụ để mình ứng dụng lập thư viện cho dạng Captcha này.

Mình lưu về svg trong máy mà vẫn bị Internet Option hả anh, em nghĩ thuần túy hiển thị thôi thì chắc không bị kiểm soát chặt vậy.
Máy bạn tôi bị và đang dùng Office 2016.

hddt.jpg
 
Upvote 0
Mình bị lỗi như sau:
 

File đính kèm

  • CleanShot 2024-10-09 at 11.04.07.png
    CleanShot 2024-10-09 at 11.04.07.png
    59.8 KB · Đọc: 39
  • CleanShot 2024-10-09 at 11.04.39.png
    CleanShot 2024-10-09 at 11.04.39.png
    118.4 KB · Đọc: 39
Upvote 0
@huhumalu
Dùng các API GDIPlus vẽ các SVG Path trực tiếp lên Userform là được không cần đến WebBrowser ActiveX rất rờm rà. Google bạn sẽ tìm thấy thư viện clsGPIPlus, nhưng thư viện này là thư viện chung nên khá tốn kém. Trong đó có phương thức vẽ SVG.


Giải đơn giản như thế này không cần phức tạp, chỉ có 6 ký tự không cần đến thuật toán QuickSort.

-----------------------------------------------------------------------------
Nếu bạn đang tận dụng thuật toán QuickSort cho nhiều dự án, bạn có thể tham khảo thuật toán QuickSort tôi đã tối ưu lại với xử lý tại memory, giúp cải thiện tốc độ, tại bài viết này.

JavaScript:
Function detectSVGCaptcha(ByVal svgCaptcha$) As String
  Dim s$, p, i%, j%, z, k%, re, ms, m, v$, d
  Set d = glbDict: Set re = glbRegex
  re.Pattern = "([MQZ])([^MQZ]*)"
  p = Split(svgCaptcha, " d=\""")
  ms = ListPathAllKeywords
  For i = 0 To UBound(ms)
    If ms(i) <> Empty Then d(ms(i)) = i
  Next
  ReDim z(1 To 6)
  For i = 1 To UBound(p)
    s = Split(p(i), "\""")(0)
    Set ms = re.Execute(s): 'm0 = 0: m1 = 0
    s = re.Replace(s, "$1") 'If Len(s) > 5
    If d.Exists(s) Then
      k = k + 1: z(k) = Array(Val(ms(0).submatches(1)), IIf(d(s) <= 26, chr(d(s) + 65), d(s) - 26))
    End If
  Next
  If k > 0 Then
    For i = 1 To k
      For j = i + 1 To k
        If z(i)(0) > z(j)(0) Then m = z(i): z(i) = z(j): z(j) = m
      Next
    Next
    s = ""
    For i = 1 To k
      s = s & z(i)(1)
    Next
    detectSVGCaptcha = s
  End If
End Function
Private Function glbRegex(Optional bGlobal As Boolean = True, Optional IgnoreCase As Boolean = True, Optional MultiLine As Boolean = True) As Object
  Set glbRegex = CreateObject("VBScript.RegExp")
  With glbRegex: .Global = bGlobal: .IgnoreCase = IgnoreCase: .MultiLine = MultiLine: End With
End Function
Private Function glbDict(Optional ByVal CompareMode As Boolean) As Object
  Set glbDict = CreateObject("Scripting.Dictionary")
  glbDict.CompareMode = -CompareMode
End Function
Private Function ListPathAllKeywords()
  Dim a$, b$, c$, d$, e$, f$, g$, h$, i$, j$, k$, l$, m$, n$, o$, p$, q$, r$, s$, t$, u$, v$, w$, x$, y$, z$
  Dim k0$, k1$, k2$, k3$, k4$, k5$, k6$, k7$, k8$, k9$, aa
  a = "MQQQQQZMQQQQQQQQQQQZMQQQQQQQQQQQQQQQQQQZMQQZ"
  b = "MQQQQQQQQQZMQQQQQQZMQQQQQQQQQQQQZMQQQQQQQQQQQQQQQQQZMQQQQQQQQZMQQQQQQQQZ"
  c = "MQQQQQQQQQQQQQQQQQQQQQZMQQQQQQQQQQQQQQQQQQQQQQQQZ"
  d = "MQQQQQQQQZMQQQQQQQQQQZMQQQQQQQQQQQQQQQZMQQQQQQQZ"
  e = "MQQQQQQQQQQQQQQQQQQZMQQQQQQQQQQQQQQQQQQQQQQQQQQQZ"
  f = "MQQQQQQQQQQQQQQZMQQQQQQQQQQQQQQQQQQQQQZ"
  g = "MQQQQQQQQQQQQQQQQQQQQQQQQQQZMQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQZ"
  h = "MQQQQQQQQQQQQQQQZMQQQQQQQQQQQQQQQQQQQQQQQQZ"
  i = ""
  j = "MQQQQQQQQQQQQQQQZMQQQQQQQQQQQQQQQQQZ"
  k = "MQQQQQQQQQQQQQZMQQQQQQQQQQQQQQQQQQQQZ"
  l = ""
  m = "MQQQQQQQQQQQQQQQQQQQQQZMQQQQQQQQQQQQQQQQQQQQQQQQQZ"
  n = "MQQQQQQQQQQQQQQZMQQQQQQQQQQQQQQQQQQZ"
  o = ""
  p = "MQQQQQQZMQQQQQQQQQQZMQQQQQQQQQQQQQQQZMQQQQQQQQZ"
  q = "MQQQQQQQQQQQQQQQZMQQQQQQQQQQQQQQQZMQQQQQQQQQQQQQQQQQQQQQQZMQQQQQQQQQQQQZ"
  r = "MQQQQQQZMQQQQQQQQQQQQZMQQQQQQQQQQQQQQQZMQQQQQQQQZ"
  s = "MQQQQQQQQQQQQQQQQQQQQQQQQQQZMQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQZ"
  t = "MQQQQQQQQQQQZMQQQQQQQQQQQQQQQQQQQZ"
  u = ""
  v = "MQQQQQQQQQQZMQQQQQQQQQQQQQQQQZ"
  w = "MQQQQQQQQQQQQQQQQQQQZMQQQQQQQQQQQQQQQQQQQQQQQQQQQZ"
  x = "MQQQQQQQQQQQQZMQQQQQQQQQQQQQQQQQQQQZ"
  y = "MQQQQQQQQQZMQQQQQQQQQQQQQZ"
  z = "MQQQQQQQQQQQQQQQQZMQQQQQQQQQQQQQQQQQQQQQZ"
  k0 = ""
  k1 = ""
  k2 = "MQQQQQQQQQQQQQQQQQQQQQQZMQQQQQQQQQQQQQQQQQQQQQQQQQQQQQZ"
  k3 = "MQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQZMQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQZ"
  k4 = "MQQQQZMQQQQQQQQQQQQQZMQQQQQQQQQQQQQQQQQQQQZMQQQQQZ"
  k5 = "MQQQQQQQQQQQQQQQQQQQQQZMQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQZ"
  k6 = "MQQQQQQQQQZMQQQQQQQQQQQQQQQZMQQQQQQQQQQQQQQQQQQQQQZMQQQQQQQQZ"
  k7 = "MQQQQQQQQQQQQQQQQQZMQQQQQQQQQQQQQQQQQQQQQQZ"
  k8 = "MQQQQQQQQZMQQQQQQQZMQQQQQQQQQQQQQQQZMQQQQQQQQQQQQQQQQQQQQQZMQQQQQQQQQZMQQQQQQQZ"
  k9 = "MQQQQQQQQZMQQQQQQQQQQQQQQQQQZMQQQQQQQQQQQQQQQQQQQQZMQQQQQQQQQQQZ"
  ListPathAllKeywords = Array(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, k0, k1, k2, k3, k4, k5, k6, k7, k8, k9)
End Function
 

File đính kèm

  • Captcha_hddt.xlsm
    743.3 KB · Đọc: 35
Lần chỉnh sửa cuối:
Upvote 0
Tool này hay quá anh ơi! anh em dân kế toán đang vật vã với hóa đơn chứng từ
Em có 1 mã số thuế , có số lượng hóa đơn hàng tháng (~500 số) và số lượng dòng dữ liệu của các hóa đơn (~ 1000), hy vọng được test file của anh ạ
sao ko xài phần mềm S3TCloud Plugin đang free đó,
Về cơ bản nó đáp ứng được tra cứu hóa đơn mua vào - bán ra
 
Upvote 0
Hình như mã nguồn dùng activex control WebBrowser - Nó dùng các dịch vụ hỗ trợ từ Internet Explorer (IE) thì phải. Mà IE không còn được hỗ trợ nữa thay vào đó MS đã chuyển sang Microsoft Edge. Theo em, nếu được thì cố gắng tránh việc dùng IE có lẽ ứng dụng sẽ chạy được trên nhiều máy tính hơn.
 
Upvote 0
Web KT

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

Back
Top Bottom