keypad : special case key (backspace-clear-entry)

It seems to me it already have a "keyPadEvent" function (interrupt) that is filled with some special cases already.

I have never used that library, but I guess the simplest solution is to have your 5-digit input in a global array, and work with that array in the keyPadEvent routine for your use. Just expand on that KeyPadEvent.

Something like this (untested, uncomplete example, just a suggestion):

#include <Keypad.h>

const int maxDigits = 5;         // nr. of digits to enter
byte inputDigits[maxDigits];   // array of digits
int digitsEntered = 0;             // nr. of digits entered via keypad

const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
char keys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'#','0','*','D'}
};
byte rowPins[ROWS] = {2,3,4,5}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {6,7,8,9}; //connect to the column pinouts of the keypad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
byte ledPin = 13;

boolean blink = false;

void setup(){
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);      // sets the digital pin as output
  digitalWrite(ledPin, HIGH);   // sets the LED on
  keypad.addEventListener(keypadEvent); //add an event listener for this keypad
}
  
void loop(){
  char key = keypad.getKey();
  
  if (key != NO_KEY) {
   if (digitsEntered < maxDigits)
   {
      inputDigits[digitsEntered++] = key;
      Serial.print(key);
   }

  }
  if (blink){
    digitalWrite(ledPin,!digitalRead(ledPin));
    delay(100);
  }
}



//take care of some special events

void keypadEvent(KeypadEvent key){

  switch (keypad.getState()){
    case PRESSED:
      switch (key){
        case '#': digitalWrite(ledPin,!digitalRead(ledPin)); break;
        case '*':
          digitalWrite(ledPin,!digitalRead(ledPin));
        break;
      }
    break;
    case RELEASED:
      switch (key){
        case 'A':   // erase digit
          if (digitsEntered > 0)
          {
             inputDigits[--digitsEntered] = 0; // erase digit (sort of..)
            Serial.print(0x08) ; // backspace
          }
          break;
        case 'B'  // erase all digits
          // more case B code...
          digitsEntered = 0; // start over the array index
          break;
        case 'C':  // Validate digits
          if (digitsEntered == 5)
          {
            Serial.println(); // next line on serial
            // more validate digits code
          }
          break;
      }
    break;
    case HOLD:
      switch (key){
        case '*': blink = true; break;
      }
    break;
  }
}