C# 確認國籍身分證
#region - 確認國籍身分證 -
/// <summary>
/// 確認國籍身分證
/// </summary>
/// <param name="country"> 國別代碼</param>
/// <param name="idno"> 身分證字號 </param>
/// <returns></returns>
public static bool GetCheckIdno( EnumCountry country, string idno)
{
switch (country)
{
case EnumCountry .TW:
if (string .IsNullOrWhiteSpace(idno) == false &&
idno.Length == 10)
{
const string header = "ABCDEFGHJKLMNPQRSTUVXYWZIO";
idno = idno.ToUpper();
var char1 = Left(idno, 1);
var char2 = Right(Left(idno, 2), 1);
var char1No = header.IndexOf(char1, StringComparison .Ordinal) + 10;
if (header.IndexOf(char1, StringComparison .Ordinal) > -1 &&
"12".IndexOf(char2, StringComparison .Ordinal) > -1)
{
#region - 台灣身分證 -
var idValue =
(((char1No / 10) * 1) + ((char1No % 10) * 9)) +
( from s in idno.ToArray().Select((c, index) => new { c, index })
where s.index > 0
select Convert .ToInt16(s.c.ToString()) * ((s.index == 9) ? 1 : (9 - s.index))).Sum();
if (idValue % 10 == 0)
{
return true ;
}
#endregion
}
else if (header.IndexOf(char1, StringComparison.Ordinal) > -1 &&
header.IndexOf(char2, StringComparison.Ordinal) > -1)
{
#region - 台灣居留證 -
var char2No = header.IndexOf(char1, StringComparison .Ordinal) + 10;
var idValue =
(((char1No / 10) * 1) + ((char1No % 10) * 9)) +
(((char2No % 10) * 9) * (9 - 1)) +
( from s in idno.ToArray().Select((c, index) => new { c, index })
where s.index > 1
select Convert .ToInt16(s.c.ToString()) * ((s.index == 9) ? 1 : (9 - s.index))).Sum();
if (idValue % 10 == 0)
{
return true ;
}
#endregion
}
}
return false ;
default:
return true ;
}
}
#endregion
留言
張貼留言