RU C Эквадорский валидатор - PullRequest
0 голосов
/ 09 июля 2020

Я хочу обновить валидатор идентификационной карты (I C или ID) до валидатора единого налогоплательщика (STR или RU C в Испании sh)

Процесс валидации следующий: следует:

  • Эквадорский идентификатор состоит из первых двух цифр, которые соответствуют провинции, в которой он был выдан, поэтому первые две цифры не будут больше 24 и меньше 0.
  • Третье di git - это число меньше 6 (0,1,2,3,4,5).
  • Следующие до девятого di git являются последовательными номер.
  • Десятый чек ди git. Коэффициенты, используемые для проверки десятого di git идентификатора, используя «Модуль 10». Коэффициенты = 2.1.2.1.2.1.2.1.2 enter image description here
function validarCedula(cedula: string) {
  if (cedula.length === 10) {
    const digitoRegion = cedula.substring(0, 2);
    if (digitoRegion >= String(1) && digitoRegion <= String(24)) {
      const ultimoDigito = Number(cedula.substring(9, 10));
      const pares = Number(cedula.substring(1, 2)) + Number(cedula.substring(3, 4)) + Number(cedula.substring(5, 6)) + Number(cedula.substring(7, 8));
      let numeroUno: any = cedula.substring(0, 1);
      numeroUno = (numeroUno * 2);
      if (numeroUno > 9) {
        numeroUno = (numeroUno - 9);
      }
      let numeroTres: any = cedula.substring(2, 3);
      numeroTres = (numeroTres * 2);
      if (numeroTres > 9) {
        numeroTres = (numeroTres - 9);
      }
      let numeroCinco: any = cedula.substring(4, 5);
      numeroCinco = (numeroCinco * 2);
      if (numeroCinco > 9) {
        numeroCinco = (numeroCinco - 9);
      }
      let numeroSiete: any = cedula.substring(6, 7);
      numeroSiete = (numeroSiete * 2);
      if (numeroSiete > 9) {
        numeroSiete = (numeroSiete - 9);
      }
      let numeroNueve: any = cedula.substring(8, 9);
      numeroNueve = (numeroNueve * 2);
      if (numeroNueve > 9) {
        numeroNueve = (numeroNueve - 9);
      }
      const impares = numeroUno + numeroTres + numeroCinco + numeroSiete + numeroNueve;
      const sumaTotal = (pares + impares);
      const primerDigitoSuma = String(sumaTotal).substring(0, 1);
      const decena = (Number(primerDigitoSuma) + 1) * 10;
      let digitoValidador = decena - sumaTotal;
      if (digitoValidador === 10) {
        digitoValidador = 0;
      }
      if (digitoValidador === ultimoDigito) {
        return true;
      } else {
        return false;
      }
    } else {
      return false;
    }
  } else {
    return false;
  }

}

But in the case of the STR(RUC on Spanish) which requires The ruc will be 13 digits, no letters, no special characters.

  • The third digit will be 6 or 9 depending on the type of person.
  • The last three digits are 001,002,003 etc., depending on the number of additional establishments.
  • The validation of the Identity Card passes an algorithm "Module 11". The number is divided into 13 parts, the first 9 are the number itself, 10 is the self-checking digit for legal entities and position 9 is the self-checking digit for public institutions, and the remaining 3 indicate whether it is the main or establishment additional.
  • The first 2 positions correspond to the province where it was issued, so the first two numbers will not be greater than 22 nor less than 1.
  • The last 3 digits cannot be 000 for legal entities and the last digits cannot be 0000 for public institutions, since they will always have at least one main one.
  • The coefficients used to verify the tenth digit of the ID, using the algorithm "Module 11".

Exceptions:

  • If the remainder is 0, it is a check digit 0.

enter image description here

введите описание изображения здесь

, который мне остается, чтобы оптимизировать идентификационный код или повторно использовать, не знаю и ищу множество вариантов, пытаясь решить эту проблему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...