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

留言

這個網誌中的熱門文章

C# 在 GDI+ 中發生泛型錯誤

[LeetCode] Robot Return to Origin