You seem to have a lot of code in the function playMP3() which has nothing to do with controlling the MP3 player. There was some of it even in the earlier version but now you have added more.
It is much easier to develop and debug a program if functions have meaningful names and only a single purpose.
I suggest you slim down the playMP3() function and create another function to check the RFID card and save the name or code to a variable that can be used by the playMP3() function.
I know it has been there for some time but I don't understand why you have if (!mfrc522.PICC_IsNewCardPresent()) inside playMP3() when it has already been tested in loop() before playMP3() is called
...R