- 積分
- 111783
- 最後登錄
- 2026-5-8
- 閱讀權限
- 200
- 回帖
- 3
- 精華
- 0
|
琪琪小站免責聲明
本論壇仍是開放式討論平台,本論壇對於所有討論的真實性、完整性及立場等,不負任何法律責任。 而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。 於有關情形下,用戶應尋求專業意見 (如涉及醫療、法律或投資等問題)。 由於本論壇受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者發現有留言出現問題,請聯絡我們。 kikishop有權刪除任何留言及拒絕任何人士上載留言,同時亦有不刪除留言的權利。 切勿撰寫粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。 本網站保留一切法律權利。
|
[mw_shl_code=csharp,true] /// <summary>
/// 判斷身分證號及統一證號是否正確,並判斷性別及國籍
///
/// 國籍
/// 本署核發之外來人口統一證號編碼,共計10碼,前2碼使用英文字母,
///第1碼為區域碼(同國民身分證註1)
///第2碼為性別碼(註 2)、3至10碼為阿拉伯數字,其中第3至9碼為流水號、第10碼為檢查號碼。
///註1:英文字母代表直轄市、縣、市別:
/// 台北市 A、台中市 B、基隆市 C、台南市 D、高雄市 E
/// 新北市 F、宜蘭縣 G、桃園縣 H、嘉義市 I、新竹縣 J
/// 苗栗縣 K、原台中縣 L、南投縣 M、彰化縣 N、新竹市 O
/// 雲林縣 P、嘉義縣 Q、原台南縣 R、原高雄縣 S、屏東縣 T
/// 花蓮縣 U、台東縣 V、金門縣 W、澎湖縣 X、連江縣 Z
/// 註2:
/// 臺灣地區無戶籍國民、大陸地區人民、港澳居民:
/// 男性使用A、女性使用B
///外國人:
/// 男性使用C、女性使用D
/// </summary>
/// <param name="str"></param>
public bool CheckIdno(String str)
{
string sex = "";
string nationality = "";
if (str == null || string.IsNullOrWhiteSpace(str) || str.Length != 10)
{
return false;
}
char[] pidCharArray = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
str = str.ToUpper(); // 轉換大寫
char[] strArr = str.ToCharArray(); // 字串轉成char陣列
int verifyNum = 0;
string pat = @"[A-Z]{1}[1-2]{1}[0-9]{8}";
// Instantiate the regular expression object.
Regex rTaiwan = new Regex(pat, RegexOptions.IgnoreCase);
// Match the regular expression pattern against a text string.
Match mTaiwan = rTaiwan.Match(str);
// 檢查身分證字號
if (mTaiwan.Success)
{
// 原身分證英文字應轉換為10~33,這裡直接作個位數*9+10
int[] pidIDInt = { 1, 10, 19, 28, 37, 46, 55, 64, 39, 73, 82, 2, 11, 20, 48, 29, 38, 47, 56, 65, 74, 83, 21, 3, 12, 30 };
// 第一碼
verifyNum = verifyNum + pidIDInt[Array.BinarySearch(pidCharArray, strArr[0])];
// 第二~九碼
for (int i = 1, j = 8; i < 9; i++, j--)
{
verifyNum += Convert.ToInt32(strArr.ToString(), 10) * j;
}
// 檢查碼
verifyNum = (10 - (verifyNum % 10)) % 10;
bool ok = verifyNum == Convert.ToInt32(strArr[9].ToString(), 10);
if (ok)
{
// 判斷性別 & 國籍
sex = "男";
if (strArr[1] == '2') sex = "女";
nationality = "本國籍";
}
return ok;
}
// 檢查統一證號(居留證)
verifyNum = 0;
pat = @"[A-Z]{1}[A-D]{1}[0-9]{8}";
// Instantiate the regular expression object.
Regex rForeign = new Regex(pat, RegexOptions.IgnoreCase);
// Match the regular expression pattern against a text string.
Match mForeign = rForeign.Match(str);
if (mForeign.Success)
{
// 原居留證第一碼英文字應轉換為10~33,十位數*1,個位數*9,這裡直接作[(十位數*1) mod 10] + [(個位數*9) mod 10]
int[] pidResidentFirstInt = { 1, 10, 9, 8, 7, 6, 5, 4, 9, 3, 2, 2, 11, 10, 8, 9, 8, 7, 6, 5, 4, 3, 11, 3, 12, 10 };
// 第一碼
verifyNum += pidResidentFirstInt[Array.BinarySearch(pidCharArray, strArr[0])];
// 原居留證第二碼英文字應轉換為10~33,並僅取個位數*6,這裡直接取[(個位數*6) mod 10]
int[] pidResidentSecondInt = { 0, 8, 6, 4, 2, 0, 8, 6, 2, 4, 2, 0, 8, 6, 0, 4, 2, 0, 8, 6, 4, 2, 6, 0, 8, 4 };
// 第二碼
verifyNum += pidResidentSecondInt[Array.BinarySearch(pidCharArray, strArr[1])];
// 第三~八碼
for (int i = 2, j = 7; i < 9; i++, j--)
{
verifyNum += Convert.ToInt32(strArr.ToString(), 10) * j;
}
// 檢查碼
verifyNum = (10 - (verifyNum % 10)) % 10;
bool ok = verifyNum == Convert.ToInt32(strArr[9].ToString(), 10);
if (ok)
{
// 判斷性別 & 國籍
sex = "男";
if (strArr[1] == 'B' || strArr[1] == 'D') sex = "女";
nationality = "外籍人士";
if (strArr[1] == 'A' || strArr[1] == 'B') nationality += "(臺灣地區無戶籍國民、大陸地區人民、港澳居民)";
}
return ok;
}
return false;
}[/mw_shl_code]
|
琪琪小站免責聲明
本論壇仍是開放式討論平台,本論壇對於所有討論的真實性、完整性及立場等,不負任何法律責任。 而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。 於有關情形下,用戶應尋求專業意見 (如涉及醫療、法律或投資等問題)。 由於本論壇受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者發現有留言出現問題,請聯絡我們。 kikishop有權刪除任何留言及拒絕任何人士上載留言,同時亦有不刪除留言的權利。 切勿撰寫粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。 本網站保留一切法律權利。
|