Example #1
0
        public ulong Generate(DateTime date, bool sex, int region)
        {
            if (region < 0 && region > 28)
            {
                return(0);
            }

            int month = date.Month;

            if (date.Year >= 2000)
            {
                month += 40;
            }
            else if (date.Year < 1900)
            {
                month += 20;
            }
            ulong result = 0;

            result  = Convert.ToUInt64(date.ToString("yy"));
            result *= 100;
            result += (ulong)month;
            result *= 100;
            result += (ulong)date.Day;
            result *= 1000;

            int regionNumber = 0;

            lock (random)
            {
                regionNumber = random.Next(regions[region].StartRegion, regions[region].EndRegion);
            }

            if (regionNumber % 2 != 0 && sex)
            {
                regionNumber--;
            }
            if (regionNumber % 2 == 0 && !sex)
            {
                regionNumber++;
            }
            result += (ulong)regionNumber;
            result *= 10;

            EGN resultEGN = new EGN(result);

            resultEGN.FixChecksum();

            if (resultEGN.IsValid())
            {
                return(resultEGN.AsNumber);
            }

            return(0);
        }
Example #2
0
        public string Info(ulong egn)
        {
            try
            {
                var infoEGN = new EGN(egn);
                if (!infoEGN.IsValid())
                {
                    return("Невалидно ЕГН");
                }

                string result = "Лице, родено на ";

                result += infoEGN.Day.ToString() + months[infoEGN.Month - 1] + infoEGN.Year.ToString();

                bool found      = false;
                int  minIndex   = 0;
                int  maxIndex   = 28;
                int  queryIndex = 0;
                do
                {
                    queryIndex = (maxIndex + minIndex) / 2;
                    if (regions[queryIndex].StartRegion <= infoEGN.Region && regions[queryIndex].EndRegion >= infoEGN.Region)
                    {
                        result += " в регион " + regions[queryIndex].Name;
                        found   = true;
                    }
                    else if (regions[queryIndex].StartRegion < infoEGN.Region)
                    {
                        minIndex = queryIndex;
                    }
                    else
                    {
                        maxIndex = queryIndex;
                    }
                } while (!found);

                if (infoEGN.IsMale)
                {
                    result += ", от мъжки пол,";
                }
                else
                {
                    result += ", от женски пол,";
                }

                int lastNumber = infoEGN.Region;
                if (infoEGN.IsMale)
                {
                    lastNumber--;
                }

                int burthNumber = (lastNumber - regions[queryIndex].StartRegion) / 2 + 1;

                result += $" родено {burthNumber} подред.";

                return(result);
            }
            catch (Exception e)
            {
                return(e.Message);
            }
        }