91 lines
2.6 KiB
C#
91 lines
2.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace GeradoresService
|
|
{
|
|
public class NISS
|
|
{
|
|
private static readonly Random random = new Random();
|
|
public static string Generate() {
|
|
return GenerateNISS();
|
|
}
|
|
private static string GenerateRandomDigits(int length)
|
|
{
|
|
string digits = "1";
|
|
for (int i = 0; i < length; i++)
|
|
{
|
|
digits += random.Next(0, 10); // Gera um dígito aleatório entre 0 e 9
|
|
}
|
|
return digits;
|
|
}
|
|
public static string GenerateNISS()
|
|
{
|
|
// Gera 9 dígitos aleatórios
|
|
string niss = GenerateRandomDigits(9);
|
|
|
|
// Calcula o dígito de controlo
|
|
int soma = 0;
|
|
for (int i = 0; i < 10; i++)
|
|
{
|
|
int digito = int.Parse(niss[i].ToString());
|
|
soma += digito * (i + 1);
|
|
}
|
|
int resto = soma % 11;
|
|
int digitoControlo = 11 - resto;
|
|
|
|
// Verifica se o dígito de controlo está no intervalo [0, 9]
|
|
if (digitoControlo == 10)
|
|
{
|
|
niss += "0";
|
|
}
|
|
else if (digitoControlo == 11)
|
|
{
|
|
niss += "1";
|
|
}
|
|
else
|
|
{
|
|
niss += digitoControlo.ToString();
|
|
}
|
|
|
|
return niss;
|
|
}
|
|
public static bool Validate(string niss)
|
|
{
|
|
// Verifica se o NISS tem 11 dígitos
|
|
if (niss.Length != 11)
|
|
return false;
|
|
|
|
// Verifica se é um número
|
|
foreach (char c in niss)
|
|
{
|
|
if (!char.IsDigit(c))
|
|
return false;
|
|
}
|
|
|
|
// Calcula o dígito de controlo
|
|
int soma = 0;
|
|
for (int i = 0; i < 10; i++)
|
|
{
|
|
int digito = int.Parse(niss[i].ToString());
|
|
soma += digito * (i + 1);
|
|
}
|
|
int resto = soma % 11;
|
|
int digitoControlo = 11 - resto;
|
|
|
|
// Verifica o último dígito do NISS
|
|
int ultimoDigito = int.Parse(niss[10].ToString());
|
|
if (digitoControlo == 10 && ultimoDigito != 0)
|
|
return false;
|
|
if (digitoControlo == 11 && ultimoDigito != 0 && ultimoDigito != 1)
|
|
return false;
|
|
if (digitoControlo != ultimoDigito)
|
|
return false;
|
|
|
|
return true;
|
|
}
|
|
}
|
|
}
|