The following is the C# code for reading the new version of foreigner’s permanent residence ID card:
//ID card information****************************************** *************************************************** *********** private void button4_Click(object sender, EventArgs e) { if (FormIsOpenReader.IsOpenReader != 1) { richTextBox_idCard_data.Text + = "EST-100 ID card reader connection failed, please open the device first \r\\ "; return; } int t_nRe = 99; int t_nType = 1; //Set the ID card reading type: 0, text information; 1, text + photo; 2, text + photo + fingerprint, card reading without fingerprint reading is faster! StringBuilder t_szPicPath = new StringBuilder("IDphoto.jpg"); //Define photo name StringBuilder t_arrChMsg = new StringBuilder(256); IDINFO idInfo = new IDINFO(); //Structure t_nRe = Donsee_ReadIDCard(t_nType, t_szPicPath, ref idInfo, t_arrChMsg); //Pay attention to the structure parameters if (t_nRe == 0) { Donsee_Beep(); if (idInfo.certType.ToString().Trim() == "I")//2017 version of Permanent Residence Certificate for Foreigners { richTextBox_idCard_data.Text + = "Read successfully, document type: 2017 version of Foreigner Permanent Residence Permit\r\\ "; richTextBox_idCard_data.Text + = "Certificate type identification:" + idInfo.certType.ToString().Trim() + "\r\\ "; richTextBox_idCard_data.Text + = "English name:" + idInfo.ENfullname + "\r\\ "; richTextBox_idCard_data.Text + = "Gender:" + idInfo.sex + "\r\\ "; richTextBox_idCard_data.Text + = "Permanent Residence Certificate Number:" + idInfo.number + "\r\\ "; richTextBox_idCard_data.Text + = "Nationality:" + idInfo.people + idInfo.Nationality + "\r\\ "; richTextBox_idCard_data.Text + = "Chinese name:" + idInfo.name + "\r\\ "; richTextBox_idCard_data.Text + = "Validity period starts:" + idInfo.signdate + "\r\\ "; richTextBox_idCard_data.Text + = "Validity period ends:" + idInfo.validterm + "\r\\ "; richTextBox_idCard_data.Text + = "Birthdate:" + idInfo.birthday + "\r\\ "; richTextBox_idCard_data.Text + = "Certificate version number:" + idInfo.certVersion + "\r\\ "; richTextBox_idCard_data.Text + = "Application organization code:" + idInfo.organs + "\r\\ "; if (t_nType != 0) { richTextBox_idCard_data.Text + = "Photo original data:" + idInfo.Photo.Substring(0, 50) + "..\r\\ "; } //Foreign permanent residence certificate does not have fingerprint data } else if (idInfo.certType.ToString().Trim() == "J")//Residence Certificate for Hong Kong, Macao and Taiwan Residents { richTextBox_idCard_data.Text + = "Read successfully, document type: Hong Kong, Macao and Taiwan Pass\r\\ "; richTextBox_idCard_data.Text + = "Certificate type identification:" + idInfo.certType.ToString().Trim() + "\r\\ "; richTextBox_idCard_data.Text + = "Name:" + idInfo.name + "\r\\ "; richTextBox_idCard_data.Text + = "Gender:" + idInfo.sex + "\r\\ "; richTextBox_idCard_data.Text + = "Birthdate:" + idInfo.birthday + "\r\\ "; richTextBox_idCard_data.Text + = "Address:" + idInfo.address + "\r\\ "; richTextBox_idCard_data.Text + = "Hong Kong, Macao and Taiwan residence permit number:" + idInfo.number + "\r\\ "; richTextBox_idCard_data.Text + = "Issuing authority:" + idInfo.organs + "\r\\ "; richTextBox_idCard_data.Text + = "Validity period starts:" + idInfo.signdate + "\r\\ "; richTextBox_idCard_data.Text + = "Validity period ends:" + idInfo.validterm + "\r\\ "; richTextBox_idCard_data.Text + = "Pass number:" + idInfo.passNu + "\r\\ "; richTextBox_idCard_data.Text + = "Number of signatures:" + idInfo.signCount + "\r\\ "; if (t_nType != 0) { richTextBox_idCard_data.Text + = "Photo original data:" + idInfo.Photo.Substring(0, 50) + "..\r\\ "; } if (t_nType == 2) { richTextBox_idCard_data.Text + = "Fingerprint original data:" + idInfo.figData.Substring(0, 50) + "..\r\\ "; } } else if (idInfo.certType.ToString().Trim() == "Y")//New version of permanent residence permit for foreigners { richTextBox_idCard_data.Text + = "Read successfully, document type: new version of Foreigner Permanent Residence Permit\r\\ "; richTextBox_idCard_data.Text + = "Certificate ID:" + idInfo.certType.ToString().Trim() + "\r\\ "; richTextBox_idCard_data.Text + = "Chinese name:" + idInfo.name + "\r\\ "; richTextBox_idCard_data.Text + = "Gender:" + idInfo.sex + "\r\\ "; richTextBox_idCard_data.Text + = "Number of certificate renewals:" + idInfo.certVersion + "\r\\ "; richTextBox_idCard_data.Text + = "Birthdate:" + idInfo.birthday + "\r\\ "; richTextBox_idCard_data.Text + = "English name:" + idInfo.ENfullname + " " + idInfo.Other + "\r\\ "; //Note that the English name, including spares, is complete Name richTextBox_idCard_data.Text + = "Certificate number:" + idInfo.number + "\r\\ "; richTextBox_idCard_data.Text + = "Validity period starts:" + idInfo.signdate + "\r\\ "; richTextBox_idCard_data.Text + = "Validity period ends:" + idInfo.validterm + "\r\\ "; richTextBox_idCard_data.Text + = "Nationality code:" + idInfo.people + "/" + idInfo.Nationality + "\r\\ "; richTextBox_idCard_data.Text + = "Current application acceptance agency:" + idInfo.organs + "\r\\ "; if (idInfo.address=="") { richTextBox_idCard_data.Text + = "Previous version of permanent residence permit number: None" + "\r\\ "; } else { richTextBox_idCard_data.Text + = "Previous version of permanent residence permit number:" + idInfo.address + "\r\\ "; } if (t_nType != 0) { richTextBox_idCard_data.Text + = "Photo data:" + idInfo.Photo.Substring(0, 50) + "..\r\\ "; //The original data is 2048 characters, and the interface only displays 50 characters } } else //(idInfo.certType.ToString().Trim() == "0") //Resident ID card { richTextBox_idCard_data.Text + = "Read successfully, document type: Resident ID card\r\\ "; richTextBox_idCard_data.Text + = "Certificate ID:" + idInfo.certType.ToString().Trim() + "\r\\ "; richTextBox_idCard_data.Text + = "Name:" + idInfo.name + "\r\\ "; richTextBox_idCard_data.Text + = "Gender:" + idInfo.sex + "\r\\ "; richTextBox_idCard_data.Text + = "Name Family:" + idInfo.people + "\r\\ "; richTextBox_idCard_data.Text + = "Birthdate:" + idInfo.birthday + "\r\\ "; richTextBox_idCard_data.Text + = "Address:" + idInfo.address + "\r\\ "; richTextBox_idCard_data.Text + = "Issuance date:" + idInfo.signdate + "\r\\ "; richTextBox_idCard_data.Text + = "Valid Date:" + idInfo.validterm + "\r\\ "; richTextBox_idCard_data.Text + = "Certificate number:" + idInfo.number + "\r\\ "; richTextBox_idCard_data.Text + = "Issuing authority:" + idInfo.organs + "\r\\ "; richTextBox_idCard_data.Text + = "Other:" + idInfo.Other + "\r\\ "; if (t_nType != 0) { richTextBox_idCard_data.Text + = "Photo data:" + idInfo.Photo.Substring(0, 50) + "..\r\\ "; //The original data is 2048 characters, and the interface only displays 50 characters } if (t_nType == 2) { richTextBox_idCard_data.Text + = "Fingerprint data:" + idInfo.figData.Substring(0, 50) + "..\r\\ "; //The original data is 2048 characters, and the interface only displays 50 characters } } if (t_nType != 0) //Display photo files { // pictureBox_idCard_photo.Image = Image.FromFile(t_szPicPath.ToString()); // Display the photo. This method may not display the photo if you swipe the card a second time, so use the following method instead to display the photo. Image imgtmp = Image.FromFile(t_szPicPath.ToString());//This can release the file occupation in time Bitmap img = new Bitmap(imgtmp); imgtmp.Dispose(); pictureBox_idCard_photo.Image = img; } } else { richTextBox_idCard_data.Text + = "Failed to read ID card: " + t_arrChMsg.ToString() + ", return value: " + t_nRe + "\r\\ "; } }