declare @nif int
set @nif = 'NIF A TESTAR' <-- PREENCHER AQUI
declare @nifNVARCHAR nvarchar(9)
set @nifNVARCHAR = CONVERT(nvarchar,@nif)
declare @nifVerificar nvarchar(9)
set @nifVerificar = ''
declare @checkdigit int
--NIF e Número de Contribuinte – Número de Identificação Fiscal
--1 – pessoa singular
--2 – pessoa singular
--NIPC – Número de Identificação de Pessoa Colectiva
--5 (pessoa colectiva),
--6 (pessoa colectiva pública),
--8 (empresário em nome individual),
--9 (pessoa colectiva irregular ou número provisório).
if(Len(@nifNVARCHAR)=9)
begin
if(SUBSTRING(@nifNVARCHAR,1,1)=1 or SUBSTRING(@nifNVARCHAR,1,1)=2 or SUBSTRING(@nifNVARCHAR,1,1)=5 or SUBSTRING(@nifNVARCHAR,1,1)=6 or SUBSTRING(@nifNVARCHAR,1,1)=8 or SUBSTRING(@nifNVARCHAR,1,1)=9)
begin
--Para calcular o digito de controlo iremos multiplicar individualmente e por ordem os restantes 8 algarismos, fazendo-o da seguinte forma:
--O 1.º digito multiplicamos por 9,
--o 2.º dígito por 8,
--3.º dígito por 7,
--4.º dígito por 6,
--5.º dígito por 5,
--6.º dígito por 4,
--7.º dígito por 3 e o
-- 8.º dígito por 2.
--Iremos somar todos os resultados da operação anterior.
--Com o resultado da soma anterior iremos dividir por 11 e aproveitar o resto dessa divisão.
--Se o resto for 0 ou 1, o dígito de controle será 0, caso seja outro algarismo, o dígito de controle será o resultado de 11 – resto.
set @checkdigit = (convert(int,SUBSTRING(@nifNVARCHAR,1,1)) * 9 +
CONVERT(int,substring(@nifNVARCHAR,2,1)) * 8 +
CONVERT(int,substring(@nifNVARCHAR,3,1)) * 7 +
CONVERT(int,substring(@nifNVARCHAR,4,1)) * 6 +
CONVERT(int,substring(@nifNVARCHAR,5,1)) * 5 +
CONVERT(int,substring(@nifNVARCHAR,6,1)) * 4 +
CONVERT(int,substring(@nifNVARCHAR,7,1)) * 3 +
CONVERT(int,substring(@nifNVARCHAR,8,1)) * 2) % 11
if(@checkdigit = 0 or @checkdigit = 1)
begin
set @nifVerificar = (SUBSTRING(@nifNVARCHAR,1,1)+
substring(@nifNVARCHAR,2,1)+
substring(@nifNVARCHAR,3,1)+
substring(@nifNVARCHAR,4,1)+
substring(@nifNVARCHAR,5,1)+
substring(@nifNVARCHAR,6,1)+
substring(@nifNVARCHAR,7,1)+
substring(@nifNVARCHAR,8,1)+'0')
--select @nifVerificar
end
else
begin
set @nifVerificar = (SUBSTRING(@nifNVARCHAR,1,1)+
substring(@nifNVARCHAR,2,1)+
substring(@nifNVARCHAR,3,1)+
substring(@nifNVARCHAR,4,1)+
substring(@nifNVARCHAR,5,1)+
substring(@nifNVARCHAR,6,1)+
substring(@nifNVARCHAR,7,1)+
substring(@nifNVARCHAR,8,1)+
convert(nvarchar,11-@checkdigit))
--select @nifVerificar
end
if(@nifNVARCHAR like @nifVerificar)
begin
select 'NIF válido'
end
else
begin
select 'NIF não válido'
end
end
end