Функция для проверки контрольного разряда кода ОКПО. Проверяются как 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