Coimbra_Tec
Membro
Boa tarde pessoal estou aqui com o um problema estou a fazer um projeto em asp.netcore8 para calcular se um determinado nif e um determinado Numero de segurança social é real e e valido
Aqui esta o meu codigo esta Presente o Model , o Controlador e a View
Model
Controlador
View
Aqui esta o meu codigo esta Presente o Model , o Controlador e a View
Model
C#:
namespace TaskProject.Models
{
public class People
{
[Key]
public int IdPeople { get; set; }
[Required]
public int FiscalNumber { get; set; }
[Required]
[MaxLength(11)]
[MinLength(11)]
public string SocialSecurityNumber { get; set;}
[Required]
[MaxLength(250)]
public string Name { get; set; }
[Required]
[MaxLength(250)]
public string NameShort { get; set; }
[Required]
[MaxLength(50)]
public string Insignia { get; set; }
[Required]
[MaxLength(250)]
public string Address { get; set; }
[Required]
[MaxLength(250)]
public string Adresse1 { get; set; }
[Required]
[MaxLength(50)]
public string Local { get; set; }
[Required]
[MaxLength(250)]
public string PostalCode { get; set; }
[Required]
[MaxLength(250)]
public string PostalCodeLocal { get; set; }
[Required]
[MaxLength(50)]
public string Country { get; set; }
[Required]
[MaxLength(50)]
public string WeAddress { get; set; }
[Required]
public DateTime DateCreation { get; set; } = DateTime.Now;
[Required]
[MaxLength(50)]
public string CreatedFrom { get; set; } = "Web";
}
}
Controlador
C#:
[HttpGet]
public IActionResult Create()
{
People peoples = new People();
return View(peoples);
}
[ValidateAntiForgeryToken]
[HttpPost]
public IActionResult Create(People people)
{
// Verificar se o NIF é válido antes de adicionar ao contexto
if (!IsValidNIF(people.FiscalNumber))
{
ModelState.AddModelError("FiscalNumber", "NIF inválido.");
return View(people);
}
// Verificar se o número de segurança social é válido antes de adicionar ao contexto
if (!IsValidSocialSecurityNumber(people.SocialSecurityNumber))
{
ModelState.AddModelError("SocialSecurityNumber", "Número de segurança social inválido.");
return View(people);
}
_context.Add(people);
_context.SaveChanges();
return RedirectToAction(nameof(Index));
}
// Método para verificar se um NIF é válido
private bool IsValidNIF(int nif)
{
// Transformar o NIF em string e garantir que tenha 9 dígitos
string nifString = nif.ToString().PadLeft(9, '0');
// Verificar se tem 9 dígitos
if (nifString.Length != 9)
return false;
// Verificar se os primeiros 8 dígitos são números
foreach (char c in nifString.Substring(0, 8))
{
if (!char.IsDigit(c))
return false;
}
// Calcular dígito de controlo
int sum = 0;
for (int i = 0; i < 8; i++)
{
int digit = int.Parse(nifString[i].ToString());
sum += digit * (9 - i);
}
int checkDigit = 11 - (sum % 11);
if (checkDigit >= 10)
checkDigit = 0;
// Verificar se o dígito de controlo coincide com o último dígito do NIF
return checkDigit == int.Parse(nifString[8].ToString());
}
// Método para verificar se um número de segurança social é válido
private bool IsValidSocialSecurityNumber(string socialSecurityNumber)
{
// Verificar se o número tem 11 dígitos
if (socialSecurityNumber.Length != 11)
{
Console.WriteLine("O número de segurança social deve ter exatamente 11 dígitos.");
return false;
}
// Converter o número de segurança social em uma matriz de inteiros
int[] digits;
try
{
// Tentar converter cada caractere da string em um inteiro
digits = socialSecurityNumber.Select(c => int.Parse(c.ToString())).ToArray();
}
catch (FormatException)
{
// Se ocorrer uma exceção de formato durante a conversão, significa que a string
// contém caracteres não numéricos
Console.WriteLine("O número de segurança social contém caracteres não numéricos.");
return false;
}
catch (OverflowException)
{
// Se ocorrer um estouro durante a conversão, significa que o número é muito grande
// para ser representado como um inteiro
Console.WriteLine("O número de segurança social é muito grande.");
return false;
}
// Calcular o primeiro dígito de controlo
int sum = 0;
for (int i = 0; i < 9; i++)
{
sum += digits[i] * (9 - i);
}
int firstControlDigit = (11 - (sum % 11)) % 10;
Console.WriteLine($"Primeiro dígito de controle calculado: {firstControlDigit}");
// Verificar se o primeiro dígito de controlo coincide
if (firstControlDigit != digits[9])
{
Console.WriteLine("O primeiro dígito de controlo do número de segurança social não coincide.");
return false;
}
// Calcular o segundo dígito de controlo
sum = 0;
for (int i = 0; i < 10; i++)
{
sum += digits[i] * (10 - i);
}
int secondControlDigit = (11 - (sum % 11)) % 10;
Console.WriteLine($"Segundo dígito de controle calculado: {secondControlDigit}");
// Verificar se o segundo dígito de controlo coincide
if (secondControlDigit != digits[10])
{
Console.WriteLine("O segundo dígito de controlo do número de segurança social não coincide.");
return false;
}
// Se chegou até aqui, significa que o número de segurança social é válido
return true;
}
View
ASP.net:
@model TaskProject.Models.People
@{
ViewData["Title"] = "Create";
Layout = "~/Views/Shared/_LayoutCriar.cshtml";
}
<h1>Create</h1>
<h4>People</h4>
<hr />
<div class="row">
<div class="col-md-4">
<form asp-action="Create">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="FiscalNumber" class="control-label">Numero Fiscal</label>
<input asp-for="FiscalNumber" class="form-control" />
<span asp-validation-for="FiscalNumber" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="SocialSecurityNumber" class="control-label">Numero de Segurança Social</label>
<input asp-for="SocialSecurityNumber" class="form-control" />
<span asp-validation-for="SocialSecurityNumber" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Name" class="control-label">Nome</label>
<input asp-for="Name" class="form-control" />
<span asp-validation-for="Name" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="NameShort" class="control-label">Apelido</label>
<input asp-for="NameShort" class="form-control" />
<span asp-validation-for="NameShort" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Insignia" class="control-label">Insignia</label>
<input asp-for="Insignia" class="form-control" />
<span asp-validation-for="Insignia" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Address" class="control-label">Morada</label>
<input asp-for="Address" class="form-control" />
<span asp-validation-for="Address" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Adresse1" class="control-label">Morada1</label>
<input asp-for="Adresse1" class="form-control" />
<span asp-validation-for="Adresse1" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Local" class="control-label">Local</label>
<input asp-for="Local" class="form-control" />
<span asp-validation-for="Local" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="PostalCode" class="control-label">Codigo Postal</label>
<input asp-for="PostalCode" class="form-control" />
<span asp-validation-for="PostalCode" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="PostalCodeLocal" class="control-label">Local do Codigo Postal</label>
<input asp-for="PostalCodeLocal" class="form-control" />
<span asp-validation-for="PostalCodeLocal" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Country" class="control-label">Cidade</label>
<input asp-for="Country" class="form-control" />
<span asp-validation-for="Country" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="WeAddress" class="control-label">Email</label>
<input asp-for="WeAddress" class="form-control" />
<span asp-validation-for="WeAddress" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="DateCreation" class="control-label">Data de Criação</label>
<input asp-for="DateCreation" class="form-control" />
<span asp-validation-for="DateCreation" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="CreatedFrom" class="control-label">Criado por</label>
<input asp-for="CreatedFrom" class="form-control" />
<span asp-validation-for="CreatedFrom" class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-primary" />
</div>
</form>
</div>
</div>
<div>
<a asp-action="Index">Back to List</a>
</div>
@section Scripts {
@{
await Html.RenderPartialAsync("_ValidationScriptsPartial");
}
}
Última edição pelo moderador: