Функция для проверки контрольного разряда кода ОКПО. Проверяются как 8-ми, так и 10-ти значные коды, при необходимости автоматически добавляются ведущие нули. Если ОКПО правильный, то функция возвращает 0, иначе 1.
- CREATE FUNCTION dbo.Check_OKPO (@OKPO VARCHAR(11))
- RETURNS INT
- AS
- BEGIN
- DECLARE @I INT, @S INT, @SUMMA INT
- SET @OKPO = LTRIM(RTRIM(@OKPO))
- IF (@OKPO IS NULL OR @OKPO = '') RETURN(1)
- IF LEN(@OKPO) < 8
- SET @OKPO = RIGHT('00000000' + @OKPO, 8)
- IF LEN(@OKPO) > 8
- SET @OKPO = RIGHT('00' + @OKPO, 10)
- SET @I = 1
- SET @SUMMA = 0
- WHILE @I < LEN(@OKPO)
- BEGIN
- SET @SUMMA = @SUMMA + CAST(SUBSTRING(@OKPO, @I, 1) AS INT) * @I
- SET @I = @I + 1
- END
- SET @S = @SUMMA % 11
- IF @S = 10 SET @S = 0
- IF @S <> CAST(RIGHT(@OKPO, 1) AS INT) RETURN(1)
- RETURN(0)
- END