NexTimeLabs
const strongRegexFiscalCode = new RegExp("(^([A-Za-z]{6}[0-9lmnpqrstuvLMNPQRSTUV]{2}[abcdehlmprstABCDEHLMPRST]{1}[0-9lmnpqrstuvLMNPQRSTUV]{2}[A-Za-z]{1}[0-9lmnpqrstuvLMNPQRSTUV]{3}[A-Za-z]{1})$|^([0-9]{11})$)");

const monthArray = [
  { code: 'A', value: '01' },
  { code: 'B', value: '02' },
  { code: 'C', value: '03' },
  { code: 'D', value: '04' },
  { code: 'E', value: '05' },
  { code: 'H', value: '06' },
  { code: 'L', value: '07' },
  { code: 'M', value: '08' },
  { code: 'P', value: '09' },
  { code: 'R', value: '10' },
  { code: 'S', value: '11' },
  { code: 'T', value: '12' }
]

//Corrispettivi caratteri codice fiscale in posizione pari
const charInEvenPosition = [
  { code: '0', value: 0 }, { code: '1', value: 1 }, { code: '2', value: 2 },
  { code: '3', value: 3 }, { code: '4', value: 4 }, { code: '5', value: 5 },
  { code: '6', value: 6 }, { code: '7', value: 7 }, { code: '8', value: 8 },
  { code: '9', value: 9 }, { code: 'A', value: 0 }, { code: 'B', value: 1 },
  { code: 'C', value: 2 }, { code: 'D', value: 3 }, { code: 'E', value: 4 },
  { code: 'F', value: 5 }, { code: 'G', value: 6 }, { code: 'H', value: 7 },
  { code: 'I', value: 8 }, { code: 'J', value: 9 }, { code: 'K', value: 10 },
  { code: 'L', value: 11 }, { code: 'M', value: 12 }, { code: 'N', value: 13 },
  { code: 'O', value: 14 }, { code: 'P', value: 15 }, { code: 'Q', value: 16 },
  { code: 'R', value: 17 }, { code: 'S', value: 18 }, { code: 'T', value: 19 },
  { code: 'U', value: 20 }, { code: 'V', value: 21 }, { code: 'W', value: 22 },
  { code: 'X', value: 23 }, { code: 'Y', value: 24 }, { code: 'Z', value: 25 }
]

//Corrispettivi caratteri codice fiscale in posizione dispari
const charInOddPosition = [
  { code: '0', value: 1 }, { code: '1', value: 0 }, { code: '2', value: 5 },
  { code: '3', value: 7 }, { code: '4', value: 9 }, { code: '5', value: 13 },
  { code: '6', value: 15 }, { code: '7', value: 17 }, { code: '8', value: 19 },
  { code: '9', value: 21 }, { code: 'A', value: 1 }, { code: 'B', value: 0 },
  { code: 'C', value: 5 }, { code: 'D', value: 7 }, { code: 'E', value: 9 },
  { code: 'F', value: 13 }, { code: 'G', value: 15 }, { code: 'H', value: 17 },
  { code: 'I', value: 19 }, { code: 'J', value: 21 }, { code: 'K', value: 2 },
  { code: 'L', value: 4 }, { code: 'M', value: 18 }, { code: 'N', value: 20 },
  { code: 'O', value: 11 }, { code: 'P', value: 3 }, { code: 'Q', value: 6 },
  { code: 'R', value: 8 }, { code: 'S', value: 12 }, { code: 'T', value: 14 },
  { code: 'U', value: 16 }, { code: 'V', value: 10 }, { code: 'W', value: 22 },
  { code: 'X', value: 25 }, { code: 'Y', value: 24 }, { code: 'Z', value: 23 }
]

//Corrispettivi risultato del resto della divisione
const controlCharArray = [
  { code: '0', value: 'A' }, { code: '1', value: 'B' }, { code: '2', value: 'C' },
  { code: '3', value: 'D' }, { code: '4', value: 'E' }, { code: '5', value: 'F' },
  { code: '6', value: 'G' }, { code: '7', value: 'H' }, { code: '8', value: 'I' },
  { code: '9', value: 'J' }, { code: '10', value: 'K' }, { code: '11', value: 'L' },
  { code: '12', value: 'M' }, { code: '13', value: 'N' }, { code: '14', value: 'O' },
  { code: '15', value: 'P' }, { code: '16', value: 'Q' }, { code: '17', value: 'R' },
  { code: '18', value: 'S' }, { code: '19', value: 'T' }, { code: '20', value: 'U' },
  { code: '21', value: 'V' }, { code: '22', value: 'W' }, { code: '23', value: 'X' },
  { code: '24', value: 'Y' }, { code: '25', value: 'Z' }

]

constructor

constructor(props) {
    super(props);
    this.state = {
      //Data
      gender: ",
      bornDate: ",
      isFiscalCodeCorrect: false
    };
  }

reverseFiscalCode

 reverseFiscalCode = event => {
    var fiscalCode = event.target.value
    const { t } = this.props



    if (strongRegexFiscalCode.test(fiscalCode) && this.checkControlLetterFiscalCode(fiscalCode)) {


      // Get gender and born date
      let getNumberGender = parseInt(fiscalCode.substring(9, 11))
      let cadastalCode = fiscalCode.substring(11, 15)

      let getNumberDayDate

      if (getNumberGender > 40) getNumberDayDate = Math.abs(getNumberGender - 40)
      else getNumberDayDate = getNumberGender

      let gender
      if (getNumberGender < 32) gender = 'M'
      else gender = 'F'


      let getNumberMonthDate = fiscalCode.substring(8, 9)
      let getNumberYearDate = fiscalCode.substring(6, 8)
      let filterMonth = monthArray.filter(item => item.code == getNumberMonthDate.toUpperCase())


      //Check born year
      let yearCheck = parseInt(getNumberYearDate) + 1900
      const date = new Date();
      const year = date.getFullYear();
      const month = date.getMonth();
      const day = date.getDate();
      let dateCheck = new Date(year - 85, month, day) // 85 years old

      let yearBorn
      if (yearCheck < dateCheck.getFullYear())
        yearBorn = parseInt(getNumberYearDate) + 2000
      else yearBorn = yearCheck

      this.setState({
        isFiscalCodeCorrect: true,
        gender: gender,
        bornDate: yearBorn + "-" + filterMonth[0].value + "-" + getNumberDayDate,
      });

    }
    else {
      this.setState({
        isFiscalCodeCorrect: false,
        gender: "",
        bornDate: "",
      });
    }
  }

checkControlLetterFiscalCode

checkControlLetterFiscalCode = (fiscalCode) => {

    let numberCharInEvenPosition = 0
    let numberCharInOddPosition = 0
    let fiscalCodeWithOutControlLetter = fiscalCode.substring(0, (fiscalCode.length - 1));


    for (var i = 0; i < fiscalCodeWithOutControlLetter.length; i++) {

      let isEven = (i + 1) % 2
      let char = fiscalCode[i].toUpperCase().toString()

      if (isEven == 0) {
        var numberChar = charInEvenPosition.filter(item => item.code == char)
        numberCharInEvenPosition += numberChar[0].value
      }
      else {
        var numberChar = charInOddPosition.filter(item => item.code == char)
        numberCharInOddPosition += numberChar[0].value
      }

    }

    let controlNumber = (numberCharInEvenPosition + numberCharInOddPosition) % 26
    let controlChar = controlCharArray.filter(item => item.code == controlNumber)
    let currentControlChar = fiscalCode[fiscalCode.length - 1].toUpperCase().toString()

    return controlChar[0].value == currentControlChar
  }
Autore: dcampanile Campanile
Fondatore

Sostieni l'idea o invia un Feedback

Unisciti alla nostra community di visionari!
insieme, ricerchiamo, sviluppiamo e sosteniamo idee innovative.

Feedback

Ancora nessun commento