dotnetthailand / ThaiNationalIDCard

A fork of chakphanu/ThaiNationalIDCard and make to actively update by .NET Thailand community
MIT License
39 stars 23 forks source link
hacktoberfest

ThaiNationalIDCard

A fork of chakphanu/ThaiNationalIDCard and maintained by .NET Thailand group

About the project

จุดกำเนิดของ library ตัวนี้ มาจากตอนที่คุณ Chakphanu Komasathit ยังทำงานที่ ม.ราชภัฏ ตอนนั้นต้องการให้น้องๆ programmer สร้าง application เพื่อดึงข้อมูลจากบัตรประจำตัวประชาชน แต่ ณ เวลานั้น library ต่างๆ ต้องซื้อและมี license ต่อเครื่อง ไม่ได้มี open source ให้ใช้งานได้ฟรี

จนคุณ Chakphanu Komasathit ได้ไปเจอกับ APDU command Delphi code ของคุณ Manoi ที่ forum hosxp เลยเริ่มนำมาพัฒนาเป็น C# .NET library

ซึ่งตอนนั้นความรู้ smartcard ของคุณ Chakphanu Komasathit เป็นศูนย์ คือต้องเริ่มนับหนึ่งใหม่ การพัฒนาจำเป็นต้องใช้ Wireshark เพื่อดูข้อมูลที่แลกเปลี่ยนกันผ่านทาง USB จนในที่สุดเมื่อได้ library ที่สามารถใช้งานได้ จึงได้ส่งต่อให้น้องๆ ในที่ทำงานนำไปพัฒนา application ต่อไป

Code example

using ThaiNationalIDCard;
...
...
public void readCard()
{
    var idcard = new ThaiIDCard();
    var personal = idcard.readAll();
    if (personal != null)
    {
        Console.WriteLine(personal.Citizenid);
        Console.WriteLine(personal.Birthday?.ToString("dd/MM/yyyy"));
        Console.WriteLine(personal.Sex);
        Console.WriteLine(personal.Th_Prefix);
        Console.WriteLine(personal.Th_Firstname);
        Console.WriteLine(personal.Th_Lastname);
        Console.WriteLine(personal.En_Prefix);
        Console.WriteLine(personal.En_Firstname);
        Console.WriteLine(personal.En_Lastname);
        Console.WriteLine(personal.Issue.ToString("dd/MM/yyyy")); // วันออกบัตร
        Console.WriteLine(personal.Expire.ToString("dd/MM/yyyy")); // วันหมดอายุ

        Console.WriteLine(personal.Address);
        Console.WriteLine(personal.addrHouseNo); // บ้านเลขที่
        Console.WriteLine(personal.addrVillageNo); // หมู่ที่
        Console.WriteLine(personal.addrLane); // ซอย
        Console.WriteLine(personal.addrRoad); // ถนน
        Console.WriteLine(personal.addrTambol);
        Console.WriteLine(personal.addrAmphur);
        Console.WriteLine(personal.addrProvince);
    }
    else if (idcard.ErrorCode() > 0)
    {
        Console.WriteLine(idcard.Error());
    }
}            

Credit

Todo