Декоратор @IsISIN в библиотеке class-validator
применяется для проверки строкового значения на соответствие формату
ISIN (International Securities Identification Number). ISIN используется
для однозначной идентификации ценных бумаг и представляет собой стандарт
ISO 6166.
ISIN всегда состоит из 12 символов и включает:
Контрольная цифра вычисляется по алгоритму Луна, что позволяет выявлять большинство ошибок ввода.
Строка считается валидной ISIN при соблюдении следующих условий:
Пример корректных значений:
US0378331005
GB0002634946
DE000BASF111
Базовая форма использования:
import { IsISIN } from 'class-validator';
class InstrumentDto {
@IsISIN()
isin: string;
}
Декоратор выполняет несколько уровней проверки:
Проверка типа значения Значение должно быть строкой. Объекты, числа и null отклоняются.
Проверка длины Строго 12 символов без исключений.
Проверка алфавитно-цифрового состава Допускаются только латинские символы и цифры.
Проверка структуры ISIN Первые два символа — код страны.
Проверка контрольной цифры Применяется алгоритм Луна, учитывающий преобразование букв в числа.
ISIN преобразуется в числовую последовательность:
буквы заменяются на числа (A = 10, B = 11, …, Z = 35);
полученная строка разбивается на отдельные цифры;
применяется алгоритм Луна:
Это обеспечивает устойчивость к опечаткам и перестановкам.
При нарушении правил валидации библиотека возвращает стандартное сообщение:
isin must be a valid ISIN numberСообщение может быть переопределено через параметры декоратора.
Поддерживается передача объекта настроек:
import { IsISIN } from 'class-validator';
class InstrumentDto {
@IsISIN({ message: 'Некорректный ISIN код инструмента' })
isin: string;
}
Сообщение может быть динамическим:
@IsISIN({
message: ({ property, value }) =>
`Поле ${property} содержит недопустимое значение: ${value}`,
})
isin: string;
Типичный сценарий — валидация входных данных финансовых API:
class CreateBondDto {
@IsISIN()
bondIsin: string;
@IsISIN()
underlyingAssetIsin: string;
}
Каждое поле валидируется независимо, ошибки группируются по свойствам объекта.
Декоратор не выполняет автоматическую трансформацию строки. Перед проверкой важно учитывать:
-) приводят к
ошибке.Для подготовки данных обычно применяется явная нормализация:
class InstrumentDto {
@Transform(({ value }) => value?.replace(/\s+/g, '').toUpperCase())
@IsISIN()
isin: string;
}
@IsISIN часто комбинируется с другими валидаторами:
class InstrumentDto {
@IsString()
@Length(12, 12)
@IsISIN()
isin: string;
}
или
class InstrumentDto {
@IsNotEmpty()
@IsISIN()
isin: string;
}
Комбинация позволяет уточнить семантику поля до применения специализированной проверки.
Поддерживается использование validation groups:
class InstrumentDto {
@IsISIN({ groups: ['create'] })
isin: string;
}
Это позволяет различать сценарии:
ISIN-валидация считается строгой и не допускает «похожих» значений:
Частые источники невалидных значений:
ISIN как поле используется в доменных моделях:
Валидация на уровне DTO позволяет отсекать некорректные данные до попадания в бизнес-логику.
Проверка ISIN:
Значения null и undefined не проходят
проверку, если не применены дополнительные декораторы:
class InstrumentDto {
@IsOptional()
@IsISIN()
isin?: string;
}
Без @IsOptional() отсутствие значения приводит к ошибке
валидации.