Comprobar el formato SEDOL con una función SQL
Contexto
Este código se creó como parte de una rutina de importación para limpiar los datos procedentes de fuentes externas, donde había todo tipo de caracteres que no deberían haber estado allí.
Éste comprueba el formato de un SEDOL. Se trata de código SQL ampliado utilizando la documentación del artículo de Wikipedia del enlace.
Esto es parte de tres artículos enlazados que comprobarán los identificadores ISIN, SEDOL y CUSIP.
SQL
ALTER FUNCTION CheckSEDOL(@SEDOL NVARCHAR(20))
RETURNS INT AS BEGIN
DECLARE @Check INT
IF RIGHT(@SEDOL,1) NOT BETWEEN '0' AND '9' BEGIN
SET @Check=-1
RETURN @Check
END
IF PATINDEX('%[^0-Z]%',@SEDOL)>0 BEGIN
SET @Check=-3
RETURN @Check
END
DECLARE @Sum INT=0,@Letter INT=1,@Char VARCHAR(1)
WHILE @Letter<LEN(@SEDOL)
BEGIN
SET @Char=SUBSTRING(@SEDOL,@Letter,1)
SET @Sum=@Sum+((SELECT (CASE WHEN @Char BETWEEN '0' AND '9' THEN @Char ELSE ASCII(UPPER(@Char))-55 END))*
(CASE @Letter WHEN 1 THEN 1 WHEN 2 THEN 3 WHEN 3 THEN 1 WHEN 4 THEN 7 WHEN 5 THEN 3 WHEN 6 THEN 9 WHEN 7 THEN 1 ELSE 0 END))
SET @Letter=@Letter+1
END
SET @Sum=(10 - @Sum%10)% 10
IFLEN(@SEDOL)<>7 BEGIN
SET @Check=-4
RETURN @Check
END
IF RIGHT(@SEDOL,1) BETWEEN '0' AND '9' BEGIN
SET @Check =(CASE WHEN RIGHT(@SEDOL,1)=@Sum THEN 1 ELSE 0 END)
END
RETURN @Check
END