Làm Thế nào CODE VBA để tạo mã QR kèm số tiền và nội dung và Không cần Mạng Internet (2 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Tôi tuân thủ nội quy khi đăng bài

Minh Tam 2024

Thành viên bị đình chỉ hoạt động
Thành viên bị đình chỉ hoạt động
Tham gia
17/3/25
Bài viết
23
Được thích
3
Em xin chào Các Bác . Em hỏi có cách nào tạo được mã QR bao gồm sẳng số tiền và nội dung giống như mấy hóa đơn của các phần mềm bán hàng . mà không sử dụng Internet dùng trên Excel được không ạ. Em xin cảm ơn các Bác
Ví dụ bên dưới quét vào nó hiện sẳng số tiền 610.000 và nội dụng K0VQR 00014W, ngân hàng nhận Vietcombank, STK: 12345678

1742196649177.png
 
Lần chỉnh sửa cuối:
Upvote 0
Dùng code VBA tạo mã code là được.Còn code vba trên này nhiều vô kể.
Tạo mã qr thì em biết. mà không biết làm sao Mã qr tích hợp sẳng số tiền , số tài khoản nhận tiền, nội dung, để người chuyển khoản quét vào bấm xác nhận là xong
 
Upvote 0
Lâu lắm rồi mới comment ở trong Diễn đàn.... Về vấn đề của bác. nếu đã biết tạo QR code mà không cần internet thì bác chỉ cần quét ở trình quét mã QR trên mạng sau đó ra text, phân tích đoạn text đó để đưa ra đoạn text phù hợp với mình, sau đó tạo QRcode ngược lại bằng đoạn text đã phân tích cho phù hợp ví dụ với tài khoản của em:
00020101021138580010A00000072701280006970418011444010000******0208QRIBFTTA53037045802VN6304076A
  • 000201: Phiên bản của mã QR.
  • 010211: Loại mã QR (tĩnh hoặc động).
  • 38580010A00000072701280006970418011444010000******: Thông tin tài khoản thụ hưởng.
    • 3858: Mã quốc gia (Việt Nam).
    • 0010A000000727: Mã định danh của ngân hàng (BIDV).
    • 01280006970418011444010000******: Số tài khoản thụ hưởng (44010000******).
  • 0208QRIBFTTA: Mã giao dịch.
  • 5303704: Mã tiền tệ (VND).
  • 5802VN: Mã quốc gia (Việt Nam).
  • 6304076A: Mã kiểm tra.
 
Upvote 0
Lâu lắm rồi mới comment ở trong Diễn đàn.... Về vấn đề của bác. nếu đã biết tạo QR code mà không cần internet thì bác chỉ cần quét ở trình quét mã QR trên mạng sau đó ra text, phân tích đoạn text đó để đưa ra đoạn text phù hợp với mình, sau đó tạo QRcode ngược lại bằng đoạn text đã phân tích cho phù hợp ví dụ với tài khoản của em:
00020101021138580010A00000072701280006970418011444010000******0208QRIBFTTA53037045802VN6304076A
  • 000201: Phiên bản của mã QR.
  • 010211: Loại mã QR (tĩnh hoặc động).
  • 38580010A00000072701280006970418011444010000******: Thông tin tài khoản thụ hưởng.
    • 3858: Mã quốc gia (Việt Nam).
    • 0010A000000727: Mã định danh của ngân hàng (BIDV).
    • 01280006970418011444010000******: Số tài khoản thụ hưởng (44010000******).
  • 0208QRIBFTTA: Mã giao dịch.
  • 5303704: Mã tiền tệ (VND).
  • 5802VN: Mã quốc gia (Việt Nam).
  • 6304076A: Mã kiểm tra.
Mình có thử rồi nhưng thay đổi số tiền khác và nội dung khác 1 tí nó cũng không được bạn à
 
Upvote 0
Mình có thử rồi nhưng thay đổi số tiền khác và nội dung khác 1 tí nó cũng không được bạn à
Làm như bác Hiếu Đoàn nói là đúng hướng đó. Giờ bước mấu chốt là bác tìm ra thuật toán để tạo ra mã kiểm tra. Mã kiểm tra sẽ kiểm tra các ký tự trước nó trong chuỗi
 
Upvote 0
Mình làm được rồi, mà theo cách khác từ python kết nối với Excel
 
Upvote 0
P
Xin chia sẻ giải thuật với Bạn ơi!!!
Python :
import qrcode
import sys

def generate_vietqr(bank_id, account_no, amount, message, filename="vietqr.png"):
vietqr_data = f"00020101021138570010A00000072701230006970422{bank_id}0110{account_no}0208QRIBFTTA5303704{amount}5802VN6218{message}6304"
qr = qrcode.make(vietqr_data)
qr.save(filename)
print(filename)

if __name__ == "__main__":
bank_id = sys.argv[1]
account_no = sys.argv[2]
amount = sys.argv[3]
message = sys.argv[4]
filename = sys.argv[5] if len(sys.argv) > 5 else "vietqr.png"

generate_vietqr(bank_id, account_no, amount, message, filename)

VBA:
Sub GenerateVietQR()
Dim pythonExe As String
Dim scriptPath As String
Dim bankId As String
Dim accountNo As String
Dim amount As String
Dim message As String
Dim qrFile As String
Dim command As String
Dim shellObj As Object

' Đường dẫn đến Python (cần chính xác theo hệ thống của bạn)
pythonExe = """C:\Users\YourUsername\AppData\Local\Programs\Python\Python39\python.exe"""

' Đường dẫn script Python
scriptPath = """C:\path\to\generate_qr.py"""

' Thông tin giao dịch
bankId = "970422" ' Vietcombank
accountNo = "0123456789"
amount = "500000"
message = "Thanh toan don hang 123"
qrFile = """C:\path\to\vietqr.png""" ' Đường dẫn lưu file ảnh QR

' Câu lệnh chạy Python
command = pythonExe & " " & scriptPath & " " & bankId & " " & accountNo & " " & amount & " """ & message & """ " & qrFile

' Gọi lệnh Python
Set shellObj = CreateObject("WScript.Shell")
shellObj.Run command, 0, True
Set shellObj = Nothing

' Hiển thị mã QR trong Excel
ActiveSheet.Pictures.Insert (qrFile)

MsgBox "Đã tạo QR thành công!", vbInformation
End Sub
 
Upvote 0
Bạn cần tìm hiểu cấu trúc, cú pháp quy định của Napas là hiểu được cách tự thêm nội dung và số tiền được luôn. Bạn sẽ tự tạo được qrcode động
 
Upvote 0
Chia sẻ mã nguồn bằng py đi bạn ơi? là file generate_qr.py ở đâu bạn?
Code Py
Mã:
import urllib.parse

def utf16_to_utf8(utf16_str: str) -> str:
    """Chuyển đổi chuỗi từ UTF-16 sang UTF-8."""
    return utf16_str.encode('utf-8').decode('utf-8') if utf16_str else ""

def url_encode(string_val: str, space_as_plus: bool = False, utf8_encode: bool = True) -> str:
    """Mã hóa URL từ một chuỗi văn bản."""
    if utf8_encode:
        string_val = utf16_to_utf8(string_val)
    
    if space_as_plus:
        return urllib.parse.quote_plus(string_val)
    else:
        return urllib.parse.quote(string_val)

def tao_qr_thanh_toan(bank_id: str, account_no: str, template: str, amount: int = 0,
                      description: str = "Thanh toan tien", account_name: str = "") -> str:
    """Tạo đường dẫn QR code thanh toán."""
    base_url = "https://img.vietqr.io/image/"
    
    quick_link = f"{base_url}{bank_id}-{account_no}-{template}.png?amount={amount}&addInfo={url_encode(description)}"
    
    if account_name:
        quick_link += f"&accountName={url_encode(account_name)}"
    
    return quick_link

def tao_ma_qr2025(sheet):
    """Xóa các hình ảnh QR cũ và tạo mã QR mới trên sheet Excel."""
    # Giả sử sheet là một đối tượng từ openpyxl hoặc pandas
    
    # Xóa ảnh QR cũ (đây chỉ là mô tả, việc xóa hình ảnh tùy thuộc vào thư viện Excel đang dùng)
    for shape in sheet.shapes:
        if shape.name not in ["Rectangle 1", "Rectangle 3", "Anh", "zalo_ID"]:
            sheet.shapes.remove(shape)
    
    # Lấy dữ liệu từ các ô trong sheet
    bank_id = str(sheet["B10"].value)
    account_no = str(sheet["B12"].value)
    template = str(sheet["B16"].value)
    amount = int(sheet["B14"].value)
    description = str(sheet["B15"].value)
    account_name = str(sheet["B13"].value)
    
    qr_link = tao_qr_thanh_toan(bank_id, account_no, template, amount, description, account_name)
    
    # Thêm hình ảnh QR vào sheet (tùy thuộc vào thư viện hỗ trợ như openpyxl hoặc xlsxwriter)
    print(f"Mã QR được tạo: {qr_link}")
 
Upvote 0
Code Py
Mã:
import urllib.parse

def utf16_to_utf8(utf16_str: str) -> str:
    """Chuyển đổi chuỗi từ UTF-16 sang UTF-8."""
    return utf16_str.encode('utf-8').decode('utf-8') if utf16_str else ""

def url_encode(string_val: str, space_as_plus: bool = False, utf8_encode: bool = True) -> str:
    """Mã hóa URL từ một chuỗi văn bản."""
    if utf8_encode:
        string_val = utf16_to_utf8(string_val)
   
    if space_as_plus:
        return urllib.parse.quote_plus(string_val)
    else:
        return urllib.parse.quote(string_val)

def tao_qr_thanh_toan(bank_id: str, account_no: str, template: str, amount: int = 0,
                      description: str = "Thanh toan tien", account_name: str = "") -> str:
    """Tạo đường dẫn QR code thanh toán."""
    base_url = "https://img.vietqr.io/image/"
   
    quick_link = f"{base_url}{bank_id}-{account_no}-{template}.png?amount={amount}&addInfo={url_encode(description)}"
   
    if account_name:
        quick_link += f"&accountName={url_encode(account_name)}"
   
    return quick_link

def tao_ma_qr2025(sheet):
    """Xóa các hình ảnh QR cũ và tạo mã QR mới trên sheet Excel."""
    # Giả sử sheet là một đối tượng từ openpyxl hoặc pandas
   
    # Xóa ảnh QR cũ (đây chỉ là mô tả, việc xóa hình ảnh tùy thuộc vào thư viện Excel đang dùng)
    for shape in sheet.shapes:
        if shape.name not in ["Rectangle 1", "Rectangle 3", "Anh", "zalo_ID"]:
            sheet.shapes.remove(shape)
   
    # Lấy dữ liệu từ các ô trong sheet
    bank_id = str(sheet["B10"].value)
    account_no = str(sheet["B12"].value)
    template = str(sheet["B16"].value)
    amount = int(sheet["B14"].value)
    description = str(sheet["B15"].value)
    account_name = str(sheet["B13"].value)
   
    qr_link = tao_qr_thanh_toan(bank_id, account_no, template, amount, description, account_name)
   
    # Thêm hình ảnh QR vào sheet (tùy thuộc vào thư viện hỗ trợ như openpyxl hoặc xlsxwriter)
    print(f"Mã QR được tạo: {qr_link}")

Đây là dùng internet và dùng api của vietqr rồi chứ có ohair tự code dâu bạn. Cái này thì vba có vài dòng code là xong mà.
 
Upvote 0
Web KT

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

Back
Top Bottom