MFRC522 read anomalies - card UID not being obtained

  mfrc522.PICC_IsNewCardPresent();

It's useless to call this function when you don't give a rats ass what it returns.

Your action() method is nonsense. You do NOT compare the contents of arrays like that. There is a really stupidly simple to use function, memcmp(), that compares arrays correctly.

It would also make sense to change checkread() to actually do what the name suggests. Check that there is a card AND read the card. Return true only if the card is successfully read.