Kiểm tra số thẻ API
Kiểm tra số thẻ thanh toán: chữ số kiểm tra Luhn, độ dài, loại thẻ (Visa, Mastercard, JCB, Amex, UnionPay, NAPAS…), ngân hàng phát hành thẻ NAPAS và dạng che số.
API kiểm tra thẻ xác nhận định dạng số thẻ thanh toán trước khi gửi tới cổng thanh toán. API chạy thuật toán Luhn, nhận diện loại thẻ theo đầu số (Visa, Mastercard kể cả dải 2, American Express, JCB, Discover, Diners Club, UnionPay, Mir, Maestro và thẻ nội địa NAPAS bắt đầu bằng 9704) và kiểm tra độ dài đúng với loại thẻ đó.
Với thẻ NAPAS, ngân hàng phát hành được đọc từ BIN 6 số (970436 → Vietcombank, 970415 → VietinBank…), dùng chung danh sách ngân hàng với API VietQR. Phản hồi còn có số thẻ đã che (6 số đầu và 4 số cuối) để hiển thị, ghi log và độ dài mã CVC của loại thẻ.
Chỉ kiểm tra định dạng: API không cho biết thẻ có tồn tại, còn hoạt động hay có tiền không. Số thẻ chỉ được xử lý trong bộ nhớ, không lưu, không ghi log, không cache. Không bao giờ gửi mã CVC hay ngày hết hạn. Xử lý số thẻ đầy đủ trên máy chủ của bạn kéo theo nghĩa vụ PCI DSS; khi chạy thật hãy ưu tiên token hoá của nhà cung cấp thanh toán.
Tham số
| Tên | Vị trí | Kiểu | Bắt buộc | Mặc định | |
|---|---|---|---|---|---|
number | body | string | có | Số thẻ (cho phép dấu cách, gạch ngang). Dùng POST. |
Ví dụ
curl -X POST "https://apibox.io.vn/v1/card-check" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"number":"9704 3666 1458 1234"}'const res = await fetch('https://apibox.io.vn/v1/card-check', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"number": "9704 3666 1458 1234"
}),
});
const data = await res.json();
console.log(data);import requests
res = requests.post(
"https://apibox.io.vn/v1/card-check",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={"number": "9704 3666 1458 1234"},
timeout=30,
)
print(res.json())<?php
$ch = curl_init('https://apibox.io.vn/v1/card-check');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['Authorization: Bearer YOUR_API_KEY', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => '{"number":"9704 3666 1458 1234"}',
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));Kết quả trả về
{
"valid": true,
"errors": [],
"brand": "NAPAS",
"length": 16,
"luhn": true,
"masked": "970436••••••1234",
"formatted_masked": "9704 36•• •••• 1234",
"bin": "970436",
"cvc_length": null,
"domestic": true,
"issuer": {
"bank": "Vietcombank",
"name": "Ngân hàng TMCP Ngoại thương Việt Nam",
"code": "VCB"
},
"note": "Format check only: …"
}
Ứng dụng
- Báo lỗi ngay khi nhập số thẻ ở trang thanh toán
- Hiện logo loại thẻ khi người dùng đang gõ
- Làm sạch dữ liệu thanh toán nhập vào
- Kiểm thử luồng thanh toán với số thẻ test
Hỏi đáp
Kết quả hợp lệ có nghĩa là thẻ dùng được không?
Không. Chỉ có nghĩa là số thẻ đúng định dạng. Chỉ tổ chức thẻ hoặc nhà cung cấp thanh toán mới cấp phép giao dịch.
Nhận diện được thẻ Việt Nam nào?
Thẻ ghi nợ nội địa NAPAS (BIN 9704xx, 16 hoặc 19 số) kèm ngân hàng phát hành; thẻ quốc tế Visa / Mastercard / JCB phát hành tại Việt Nam được nhận diện theo loại thẻ.
Gửi số thẻ có an toàn không?
Số thẻ không được lưu, không ghi log và phản hồi không được cache. Dù vậy chỉ gửi qua HTTPS bằng POST và không bao giờ gửi CVC hay ngày hết hạn.
API liên quan
Tạo mã hash
Tính MD5, SHA-1, SHA-256, SHA-384, SHA-512 và CRC32 của chuỗi hoặc file trong một lần gọi, xuất hex hoặc base64, hỗ trợ ký HMAC.
B64Mã hoá / Giải mã
Mã hoá hoặc giải mã chuỗi sang Base64, Base64URL, hex, URL encode, HTML entity, Unicode escape, ROT13 hay nhị phân chỉ với một lần gọi API.
***Tạo mật khẩu
Tạo mật khẩu ngẫu nhiên an toàn bằng CSPRNG (4–256 ký tự, tối đa 100 cái mỗi lần) hoặc kiểm tra độ mạnh, entropy và thời gian bẻ khoá của mật khẩu.