snils

package module
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 17, 2026 License: MIT Imports: 4 Imported by: 0

README

snils

Go Version CI License Go Reference

Go-библиотека для нормализации и валидации СНИЛС (страхового номера индивидуального лицевого счета) Российской Федерации.

✨ Возможности

  • нормализация СНИЛС;
  • проверка длины;
  • проверка содержимого;
  • проверка запрещенных значений;
  • проверка контрольной суммы по официальному алгоритму;
  • поддержка errors.Is.

📦 Установка

go get github.com/Kenedy228/snils

🚀 Использование

package main

import (
	"errors"
	"fmt"

	"github.com/Kenedy228/snils"
)

func main() {
	raw := "112-233-445 95"

	normalized := snils.Normalize(raw)

	if err := snils.Validate(normalized); err != nil {
		fmt.Println("СНИЛС невалиден:", err)

		if errors.Is(err, snils.ErrInvalidChecksum) {
			fmt.Println("Неверная контрольная сумма")
		}

		return
	}

	fmt.Println("СНИЛС валиден")
}

🧩 API

Нормализация
normalized := snils.Normalize("112-233-445 95")

fmt.Println(normalized)

Результат:

11223344595
Валидация
err := snils.Validate("11223344595")
fmt.Println(err == nil)

Результат:

true
Ошибки

Пакет возвращает следующие ошибки:

Ошибка Описание
snils.ErrInvalidLength Неверная длина СНИЛС
snils.ErrInvalidContent СНИЛС содержит недопустимые символы
snils.ErrForbiddenSNILS Запрещенное значение СНИЛС
snils.ErrInvalidChecksum Неверная контрольная сумма

Пример обработки:

if errors.Is(err, snils.ErrInvalidChecksum) {
	// обработка ошибки контрольной суммы
}
Формат СНИЛС

Нормализованный СНИЛС состоит из 11 цифр:

XXX XXX XXX YY

где:

  • XXX XXX XXX — номер
  • YY — контрольное число
Контрольная сумма

Контрольное число рассчитывается следующим образом:

  1. Каждая из первых 9 цифр умножается на вес от 9 до 1;
  2. Полученные значения суммируются;
  3. Применяются правила расчета контрольного числа:
    • если сумма меньше 100 — контрольное число равно сумме;
    • если сумма равна 100 — контрольное число равно 0;
    • если сумма больше 100:
      • вычисляется остаток от деления на 101;
      • если остаток равен 100 — контрольное число равно 0;
      • иначе контрольное число равно остатку.

Проверка контрольного числа выполняется только для номеров больше 1001998.

🧪 Тестирование

go test ./...

🔗 Источники


📄 Лицензия

MIT

Documentation

Overview

Package snils предоставляет функции для нормализации и валидации страхового номера индивидуального лицевого счета (СНИЛС) Российской Федерации.

Пакет реализует:

  • приведение СНИЛС к нормализованному виду (удаление пробелов и разделителей);
  • проверку длины и допустимых символов;
  • проверку на запрещенные значения;
  • проверку контрольного числа по установленному алгоритму.

Нормализованный СНИЛС представляет собой строку из 11 цифр без пробелов и разделителей (например, "11223344595").

Основные функции:

  • Normalize — удаляет пробелы и разделители из строки СНИЛС;
  • Validate — выполняет полную проверку нормализованного СНИЛС.

Пример использования:

s := snils.Normalize("112-233-445 95")

if err := snils.Validate(s); err != nil {
    // обработка ошибки
}

if err := snils.Validate("11223344595"); err == nil {
    // СНИЛС валиден
}

Проверка контрольного числа выполняется только для номеров, превышающих установленный порог (см. MinNumberForChecksum).

Index

Constants

View Source
const (
	// SNILSLength определяет длину нормализованного СНИЛС.
	//
	// Нормализованный СНИЛС содержит только 11 цифр без пробелов
	// и разделителей.
	SNILSLength = 11

	// ForbiddenSNILS содержит запрещенное значение СНИЛС.
	//
	// Значение из одиннадцати нулей не считается корректным СНИЛС.
	ForbiddenSNILS = "00000000000"

	// MinNumberForChecksum определяет минимальный номер СНИЛС,
	// начиная с которого применяется проверка контрольного числа.
	//
	// Для номеров больше этого значения контрольное число должно
	// соответствовать установленному алгоритму расчета.
	MinNumberForChecksum = 1001998
)

Variables

View Source
var (
	// ErrInvalidLength возвращается, если длина СНИЛС не равна SNILSLength.
	ErrInvalidLength = errors.New("неверная длина СНИЛС")

	// ErrInvalidContent возвращается, если СНИЛС содержит символы,
	// отличные от цифр.
	ErrInvalidContent = errors.New("СНИЛС должен содержать только цифры")

	// ErrForbiddenSNILS возвращается, если СНИЛС равен запрещённому значению.
	ErrForbiddenSNILS = errors.New("запрещенное значение СНИЛС")

	// ErrInvalidChecksum возвращается, если контрольное число СНИЛС
	// не соответствует вычисленному значению.
	ErrInvalidChecksum = errors.New("неверная контрольная сумма СНИЛС")
)

Functions

func Normalize

func Normalize(snils string) string

Normalize приводит СНИЛС к нормализованному виду.

Функция удаляет пробелы и допустимые разделители, возвращая строку, состоящую только из символов исходного ввода, не являющихся пробелами или разделителями.

Normalize не выполняет валидацию содержимого СНИЛС.

func Validate

func Validate(normalizedSnils string) error

Validate выполняет полную проверку нормализованного СНИЛС.

Ожидается, что входная строка уже приведена к нормализованному виду (например, с помощью функции Normalize) и содержит только цифры.

Проверки выполняются в следующем порядке:

  • длина СНИЛС;
  • допустимость символов (только цифры);
  • проверка на запрещенное значение;
  • проверка контрольного числа (если применимо);

Возвращает одну из ошибок:

  • ErrInvalidLength;
  • ErrInvalidContent;
  • ErrForbiddenSNILS;
  • ErrInvalidChecksum.

При успешной валидации возвращает nil.

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL