Well, I went ahead and completed the character codes so I can do some fun challenge runs. If you want to add them to yours, either download the attached zip or replace ALL of the text in CharIndexComplete.txt with the following:
Note that I did this for 4.0.2. If you copy the text instead of downloading the attached version, it should be good to use for the 5.0 version that's been posted earlier. Like OP mentioned, some of these may be different for you and may even be different across save files. I've only tested them on one playthrough so it's very likely that a few of these won't be the same on my next one or for the next person that tries it.
Right, there's a few reasons as to why this happens. If you fail to recruit a character, that seems to cause all subsequent characters to get shifted in memory, causing some of them to get swapped. Looks like that isn't the issue for you, but I believe that if you start a fresh game and never make a save and only rely on save states to save your progress, it will help prevent this issue of different save files having different character ID's. You may want to give that a go after you've figured out working codes.
The way I figured out character ID's was horribly tedious, but I'm happy to lay out my method in case you really want to go for it. If you have Nolan's ID working, then you can essentially obtain any subsequent character's ID by adding 3F0 to the first half of the hex code (since for some reason he's the first one in memory). So Nolan's 99 EXP code is:
You can obtain subsequent characters by adding multiples of 3F0 to 0084DA8F. You can tell you got the right character by adding the AR code, launching, and seeing if that character's exp was changed to 99. So you'd start by adding 3F0 to Nolan's, which gives you 0084de7f, and if that doesn't work, add another 3F0, and so on. Yes, it's horribly tedious. Generally, ones in the beginning of the game are a bit easier to land and tend to be bundled together. Almost all of the characters can be obtained by adding 3F0 to the previous one without any holes (although there is a hole in there somewhere for the Black Knight), but about six of them I found to be completely isolated from the rest, with their memory addresses being quite far ahead of the rest with a large gap in memory causing me a headache and a half. I eventually sped up the process by writing a quick Python script that generates EXP codes to try out in bulk, and by pasting in multiples at a time in the AR code (you can easily throw in 100 of the generated lines and have no issues), you can at least determine whether or not the character you want is within that batch. If it isn't, generate more codes, and if it is, then keep cutting out about half of them until you finally find it. If you want to give it a go, here's my script:
Basically, replace "NUM_TO_GENERATE" with the number of subsequent codes you want to generate. If you want a late game character like Stefan, I'd generate about 100 and cut off the first 70 or so. If you want someone like Aran, I'd' start with something like 40 since he does seem to be later in the list of characters, but isn't lost in memory like Stefan is. Sorry if this explanation is hard to understand. Let me know if it is and I'll try to clarify.
I'm sure there's a better way to get character codes, but I haven't been able to figure anything out other than trial and error like this. I tried making sense of the Memory view in the Dolphin debugger, but couldn't quite figure out how to read where a character is in memory. I have no idea how people originally figured out where these locations in memory are, and if anybody knows of a better way, I'd love it if you shared.