Technology

bic/swift code คือ

bicswift code คอ
bic/swift code คือ | SiamCafe Blog
2025-09-15· อ. บอม — SiamCafe.net· 1,701 คำ

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

📖 บทความที่เกี่ยวข้อง

Cloudflare Low Code No Codeอ่านบทความ → Pulumi IaC Code Review Best Practiceอ่านบทความ → AWS App Runner Low Code No Codeอ่านบทความ → PostgreSQL Full Text Search Infrastructure as Codeอ่านบทความ → PHP Filament Infrastructure as Codeอ่านบทความ →

📚 ดูบทความทั้งหมด →