c# Форматирование числа (ИНН) в строку

323
05 марта 2017, 05:39

Есть числовое(decimal) поле ИНН (10, 12 символов). Первые 2-а числа в ИНН - код региона.

Мне надо его превратить в строку. Если длина строки 9 или 11 символов, то дописать 0.

Можно ли это сделать сразу в выражении ToString()?

INN.ToString("#.##")

Answer 1

Если уже есть использование преобразования в SQL тогда почему бы не преобразовывать сразу в string? К самому string'у уже можно дописать метод расширения:

public static class MyExtention
{
    public static string ToINN(this string str)
    {
        if (string.IsNullOrEmpty(str))
            return str;
        string prefix = "000";
        string res = prefix + str;
        return str.Length <= 9 ? res.GetLast(10) : res.GetLast(12);
    }
    public static string GetLast(this string source, int tail_length)
    {
        if (tail_length >= source.Length)
            return source;
        return source.Substring(source.Length - tail_length);
    }
}
class Program
{
    public static void Main(string[] args)
    {
        string inn1 = "999999999",  //9
               inn2 = "11111111111";//11
        Console.WriteLine(string.Format("Old INN {0}(l={2}), new INN {1}(l={3})", inn1, inn1.ToINN(), inn1.Length, inn1.ToINN().Length));
        Console.WriteLine(string.Format("Old INN {0}(l={2}), new INN {1}(l={3})", inn2, inn2.ToINN(), inn2.Length, inn2.ToINN().Length));
    }
}

Результат работы:

Answer 2

Решил не использовать decimal.

Из базы при получении данных делаю

cast(field as bigint) as INN

далее в коде

inn > 10000000000 ? inn.Value.ToString("D12") : inn.Value.ToString("D10")

Всем спасибо.

READ ALSO
Дружественная сборка

Дружественная сборка

У меня есть 2 проекта в solutionВ одном класс, где есть private методы, которые нужно протестировать

225
Имеются ли условные операторы IF NOT EXIST для CREATE TABLE?

Имеются ли условные операторы IF NOT EXIST для CREATE TABLE?

Если нет возможности в FireBird 25 добавить констуркцию подобно MySQL то как правильнее проверять наличие создаваемой таблицы

309