BIC/SWIFT Code คืออะไร — คู่มือฉบับสมบูรณ์
BIC (Bank Identifier Code) หรือ SWIFT Code เป็นรหัสมาตรฐานสากลสำหรับระบุธนาคารในการโอนเงินระหว่างประเทศ จัดการโดย SWIFT (Society for Worldwide Interbank Financial Telecommunication) มีสมาชิกกว่า 11,000 สถาบันการเงินใน 200+ ประเทศ BIC/SWIFT Code มี 8 หรือ 11 ตัวอักษร ใช้ใน wire transfer, trade finance และ interbank messaging ทุกครั้งที่โอนเงินข้ามประเทศต้องใช้ SWIFT Code ของธนาคารปลายทาง บทความนี้อธิบายโครงสร้าง การใช้งาน และ Python tools สำหรับ validate SWIFT codes
โครงสร้าง BIC/SWIFT Code
# swift_structure.py — SWIFT code structure explained
import json
class SWIFTStructure:
STRUCTURE = {
"bank_code": {
"position": "1-4",
"name": "Bank Code (Institution Code)",
"description": "รหัสธนาคาร 4 ตัวอักษร — unique ต่อธนาคาร",
"example": "KRTB = ธนาคารกรุงไทย, BKKB = ธนาคารกรุงเทพ",
},
"country_code": {
"position": "5-6",
"name": "Country Code (ISO 3166-1)",
"description": "รหัสประเทศ 2 ตัวอักษร ตามมาตรฐาน ISO",
"example": "TH = Thailand, US = United States, JP = Japan",
},
"location_code": {
"position": "7-8",
"name": "Location Code",
"description": "รหัสเมืองหรือ location 2 ตัวอักษร/ตัวเลข",
"example": "BK = Bangkok, NY = New York, TK = Tokyo",
},
"branch_code": {
"position": "9-11 (optional)",
"name": "Branch Code",
"description": "รหัสสาขา 3 ตัวอักษร — ถ้าไม่มี = สำนักงานใหญ่ (XXX หรือเว้นว่าง)",
"example": "XXX = Head Office, 001 = สาขาเฉพาะ",
},
}
THAI_BANKS = {
"KRTHTHBK": {"name": "ธนาคารกรุงไทย", "english": "Krungthai Bank"},
"BKKBTHBK": {"name": "ธนาคารกรุงเทพ", "english": "Bangkok Bank"},
"KASITHBK": {"name": "ธนาคารกสิกรไทย", "english": "Kasikornbank"},
"SICOTHBK": {"name": "ธนาคารไทยพาณิชย์", "english": "Siam Commercial Bank"},
"AYUDTHBK": {"name": "ธนาคารกรุงศรีอยุธยา", "english": "Bank of Ayudhya (Krungsri)"},
"TABORATHBK": {"name": "ธนาคารทหารไทยธนชาต", "english": "TMBThanachart Bank (ttb)"},
"UBOBTHBK": {"name": "ธนาคารยูโอบี", "english": "United Overseas Bank (UOB)"},
"GABORATHBK": {"name": "ธนาคารออมสิน", "english": "Government Savings Bank"},
}
def show_structure(self):
print("=== SWIFT Code Structure ===\n")
print(" Example: K R T H T H B K")
print(" ^^^^ ^^ ^^ ^^^")
print(" Bank CC Loc Branch\n")
for key, part in self.STRUCTURE.items():
print(f"[{part['name']}] Position {part['position']}")
print(f" {part['description']}")
print(f" Example: {part['example']}")
print()
def show_thai_banks(self):
print("=== Thai Bank SWIFT Codes ===")
for code, bank in self.THAI_BANKS.items():
print(f" {code:<12} {bank['name']} ({bank['english']})")
swift = SWIFTStructure()
swift.show_structure()
swift.show_thai_banks()
การใช้งาน SWIFT Code
# usage.py — How SWIFT codes are used
import json
class SWIFTUsage:
USE_CASES = {
"wire_transfer": {
"name": "โอนเงินระหว่างประเทศ (Wire Transfer)",
"description": "ใช้ SWIFT Code ระบุธนาคารปลายทาง",
"info_needed": [
"SWIFT Code ธนาคารปลายทาง",
"ชื่อบัญชีผู้รับ (ภาษาอังกฤษ)",
"เลขที่บัญชี / IBAN",
"จำนวนเงิน + สกุลเงิน",
"วัตถุประสงค์การโอน",
],
},
"receive_money": {
"name": "รับเงินจากต่างประเทศ",
"description": "ให้ SWIFT Code ธนาคารของเรากับผู้โอน",
"info_to_give": [
"SWIFT Code ธนาคารของเรา",
"ชื่อบัญชีของเรา (ภาษาอังกฤษ)",
"เลขที่บัญชี",
"ชื่อธนาคาร + สาขา",
"ที่อยู่ธนาคาร",
],
},
"trade_finance": {
"name": "Trade Finance (L/C, Bank Guarantee)",
"description": "ใช้ SWIFT messages (MT700, MT760) สำหรับ Letter of Credit",
},
"correspondent_banking": {
"name": "Correspondent Banking",
"description": "ธนาคารใช้ SWIFT เพื่อสื่อสารกัน — settlement, FX, securities",
},
}
FEES = {
"outgoing_th": {
"name": "ค่าธรรมเนียมโอนออก (จากไทย)",
"fee": "200-750 บาท + ค่า cable + intermediary bank fee",
"time": "1-3 วันทำการ",
},
"incoming_th": {
"name": "ค่าธรรมเนียมรับเข้า (เข้าไทย)",
"fee": "200-500 บาท + อัตราแลกเปลี่ยน",
"time": "1-3 วันทำการ",
},
}
def show_usage(self):
print("=== SWIFT Code Usage ===\n")
for key, use in self.USE_CASES.items():
print(f"[{use['name']}]")
print(f" {use['description']}")
if 'info_needed' in use:
for info in use['info_needed'][:4]:
print(f" • {info}")
print()
def show_fees(self):
print("=== Transfer Fees (Thailand) ===")
for key, fee in self.FEES.items():
print(f" [{fee['name']}]")
print(f" Fee: {fee['fee']}")
print(f" Time: {fee['time']}")
usage = SWIFTUsage()
usage.show_usage()
usage.show_fees()
Python SWIFT Validator
# validator.py — Python SWIFT/BIC code validator
import json
import re
class SWIFTValidator:
CODE = """
# swift_validator.py — Validate and parse SWIFT/BIC codes
import re
class SWIFTValidator:
# ISO 3166-1 alpha-2 country codes (partial list)
COUNTRY_CODES = {
"TH", "US", "GB", "JP", "CN", "SG", "HK", "AU", "DE", "FR",
"CH", "CA", "KR", "IN", "MY", "ID", "PH", "VN", "NZ", "AE",
}
SWIFT_PATTERN = re.compile(r'^[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}([A-Z0-9]{3})?$')
def validate(self, swift_code):
'''Validate SWIFT/BIC code format and structure'''
code = swift_code.upper().strip()
errors = []
# Length check
if len(code) not in (8, 11):
errors.append(f"Length must be 8 or 11, got {len(code)}")
# Pattern check
if not self.SWIFT_PATTERN.match(code):
errors.append("Invalid format: must be 4 letters + 2 letters + 2 alphanumeric [+ 3 alphanumeric]")
# Country code check
if len(code) >= 6:
country = code[4:6]
if country not in self.COUNTRY_CODES:
errors.append(f"Unknown country code: {country}")
return {
"code": code,
"valid": len(errors) == 0,
"errors": errors,
"parsed": self.parse(code) if len(errors) == 0 else None,
}
def parse(self, swift_code):
'''Parse SWIFT code into components'''
code = swift_code.upper().strip()
return {
"bank_code": code[0:4],
"country_code": code[4:6],
"location_code": code[6:8],
"branch_code": code[8:11] if len(code) == 11 else "XXX",
"is_head_office": len(code) == 8 or code[8:11] == "XXX",
}
def lookup_thai_bank(self, swift_code):
'''Lookup Thai bank by SWIFT code'''
thai_banks = {
"KRTH": "ธนาคารกรุงไทย (Krungthai Bank)",
"BKKB": "ธนาคารกรุงเทพ (Bangkok Bank)",
"KASI": "ธนาคารกสิกรไทย (Kasikornbank)",
"SICO": "ธนาคารไทยพาณิชย์ (SCB)",
"AYUD": "ธนาคารกรุงศรีอยุธยา (Krungsri)",
"UBOB": "ธนาคารยูโอบี (UOB)",
}
bank_code = swift_code[:4].upper()
return thai_banks.get(bank_code, "Unknown bank")
def format_for_transfer(self, swift_code, account_name, account_number, bank_name):
'''Format bank details for international transfer'''
parsed = self.parse(swift_code)
return {
"swift_bic": swift_code.upper(),
"bank_name": bank_name,
"account_name": account_name,
"account_number": account_number,
"country": parsed["country_code"],
"branch": "Head Office" if parsed["is_head_office"] else parsed["branch_code"],
}
# Usage
validator = SWIFTValidator()
# Validate
result = validator.validate("KRTHTHBK")
print(f"Valid: {result['valid']}")
print(f"Parsed: {result['parsed']}")
# Lookup Thai bank
bank = validator.lookup_thai_bank("KASITHBK")
print(f"Bank: {bank}")
# Format for transfer
details = validator.format_for_transfer(
"BKKBTHBK", "SOMCHAI JAIDEE", "1234567890", "Bangkok Bank"
)
print(json.dumps(details, indent=2))
"""
def show_code(self):
print("=== SWIFT Validator ===")
print(self.CODE[:600])
validator = SWIFTValidator()
validator.show_code()
SWIFT กับ IBAN
# swift_vs_iban.py — SWIFT vs IBAN comparison
import json
class SWIFTvsIBAN:
COMPARISON = {
"swift": {
"name": "SWIFT/BIC Code",
"identifies": "ธนาคาร (institution)",
"format": "8-11 ตัวอักษร",
"used_in": "ทั่วโลก (200+ ประเทศ)",
"example": "KRTHTHBK",
"managed_by": "SWIFT (Belgium)",
},
"iban": {
"name": "IBAN (International Bank Account Number)",
"identifies": "บัญชีธนาคาร (account)",
"format": "15-34 ตัวอักษร/ตัวเลข",
"used_in": "ยุโรป + บางประเทศ (70+ ประเทศ)",
"example": "GB29NWBK60161331926819",
"managed_by": "ISO 13616",
},
}
ALTERNATIVES = {
"wise": {
"name": "Wise (TransferWise)",
"description": "โอนเงินผ่าน local bank networks — ถูกกว่า SWIFT 3-8x",
"fee": "0.3-2% ของจำนวนเงิน",
"speed": "นาที - 1 วัน",
},
"ripple": {
"name": "RippleNet / XRP",
"description": "Blockchain-based cross-border payments",
"fee": "ต่ำมาก (< $0.01)",
"speed": "3-5 วินาที",
},
"promptpay_intl": {
"name": "PromptPay International",
"description": "เชื่อมต่อกับ Singapore PayNow, Malaysia DuitNow",
"fee": "ต่ำกว่า SWIFT",
"speed": "Real-time",
},
}
def show_comparison(self):
print("=== SWIFT vs IBAN ===\n")
for key, item in self.COMPARISON.items():
print(f"[{item['name']}]")
print(f" Identifies: {item['identifies']}")
print(f" Format: {item['format']}")
print(f" Used in: {item['used_in']}")
print(f" Example: {item['example']}")
print()
def show_alternatives(self):
print("=== Alternatives to SWIFT ===")
for key, alt in self.ALTERNATIVES.items():
print(f" [{alt['name']}] {alt['description']}")
print(f" Fee: {alt['fee']}, Speed: {alt['speed']}")
def when_to_use(self):
print(f"\n=== เมื่อไหร่ใช้อะไร ===")
cases = [
("โอนไปยุโรป", "ต้องมีทั้ง SWIFT + IBAN"),
("โอนไป US/Asia", "ใช้ SWIFT + Account Number (ไม่มี IBAN)"),
("โอนเล็กๆ (< 50,000 บาท)", "Wise ถูกกว่า SWIFT มาก"),
("โอนใหญ่ (> 1 ล้านบาท)", "SWIFT ผ่านธนาคารปลอดภัยที่สุด"),
("โอนด่วนไป Singapore", "PromptPay-PayNow (real-time, ถูก)"),
]
for case, recommendation in cases:
print(f" {case}: {recommendation}")
comp = SWIFTvsIBAN()
comp.show_comparison()
comp.show_alternatives()
comp.when_to_use()
วิธีหา SWIFT Code ธนาคาร
# find_swift.py — How to find SWIFT codes
import json
class FindSWIFT:
METHODS = {
"bank_website": {
"name": "1. เว็บไซต์ธนาคาร",
"description": "เข้าหน้า 'โอนเงินต่างประเทศ' หรือ 'International Transfer'",
"example": "กรุงไทย: ktb.co.th → บริการ → โอนเงินต่างประเทศ → SWIFT: KRTHTHBK",
},
"bank_app": {
"name": "2. Mobile Banking App",
"description": "ดูในเมนู 'โอนเงินต่างประเทศ' หรือ 'ข้อมูลธนาคาร'",
},
"call_center": {
"name": "3. Call Center ธนาคาร",
"description": "โทรถามได้ — กรุงไทย 02-111-1111, กสิกร 02-888-8888",
},
"online_lookup": {
"name": "4. ค้นหาออนไลน์",
"description": "ใช้เว็บไซต์ค้นหา SWIFT Code",
"sites": [
"bank.codes — ค้นหา SWIFT code ทั่วโลก",
"theswiftcodes.com — comprehensive database",
"wise.com/swift-codes — Wise SWIFT lookup",
],
},
"bank_statement": {
"name": "5. Bank Statement / สมุดบัญชี",
"description": "บางธนาคารพิมพ์ SWIFT Code บน statement",
},
}
def show_methods(self):
print("=== วิธีหา SWIFT Code ===\n")
for key, method in self.METHODS.items():
print(f"[{method['name']}]")
print(f" {method['description']}")
if 'sites' in method:
for site in method['sites']:
print(f" • {site}")
print()
def thai_bank_contacts(self):
print("=== Thai Bank Contacts ===")
banks = [
{"name": "กรุงไทย", "swift": "KRTHTHBK", "tel": "02-111-1111"},
{"name": "กรุงเทพ", "swift": "BKKBTHBK", "tel": "1333"},
{"name": "กสิกรไทย", "swift": "KASITHBK", "tel": "02-888-8888"},
{"name": "ไทยพาณิชย์", "swift": "SICOTHBK", "tel": "02-777-7777"},
{"name": "กรุงศรี", "swift": "AYUDTHBK", "tel": "1572"},
]
print(f" {'ธนาคาร':<15} {'SWIFT':<12} {'โทร'}")
for b in banks:
print(f" {b['name']:<15} {b['swift']:<12} {b['tel']}")
find = FindSWIFT()
find.show_methods()
find.thai_bank_contacts()
FAQ - คำถามที่พบบ่อย
Q: BIC กับ SWIFT Code เหมือนกันไหม?
A: เหมือนกัน — BIC (Bank Identifier Code) เป็นชื่ออย่างเป็นทางการตามมาตรฐาน ISO 9362 SWIFT Code เป็นชื่อที่คนทั่วไปเรียก เพราะจัดการโดย SWIFT ใช้แทนกันได้ 100% ธนาคารบางแห่งเรียก BIC/SWIFT Code หรือ SWIFT/BIC Code
Q: ใช้ SWIFT Code 8 ตัว หรือ 11 ตัว?
A: 8 ตัว = สำนักงานใหญ่ (head office) 11 ตัว = ระบุสาขา (3 ตัวท้ายเป็น branch code) ส่วนใหญ่ใช้ 8 ตัวก็พอ — ธนาคารจะ route ไปสาขาที่ถูกต้องเอง ถ้าไม่แน่ใจ: ใช้ 8 ตัว หรือเพิ่ม XXX ท้าย (เช่น KRTHTHBKXXX)
Q: โอนเงินต่างประเทศใช้เวลากี่วัน?
A: SWIFT transfer ปกติ: 1-3 วันทำการ ถ้าผ่าน intermediary bank: อาจ 3-5 วัน ปัจจัยที่มีผล: เวลาส่ง (ก่อน/หลัง cut-off time), สกุลเงิน, ประเทศปลายทาง ทางเลือกเร็วกว่า: Wise (นาที-1 วัน), PromptPay International (real-time สำหรับ ASEAN)
Q: ค่าธรรมเนียมโอน SWIFT เท่าไหร่?
A: ค่าธรรมเนียมมีหลายส่วน: ค่าธรรมเนียมธนาคารผู้โอน: 200-750 บาท ค่า cable/SWIFT charge: 200-400 บาท ค่า intermediary bank: 200-500 บาท (ถ้ามี) Spread อัตราแลกเปลี่ยน: 0.5-2% ทางเลือกถูกกว่า: Wise (0.3-1.5% total), DeeMoney, PromptPay International
