I finally went with the checksum method for sorting the dupes. I did try Ian's suggestion initially & it went very well on fonts where each character was the same dimensions (like 8x8 & 9x10 etc) but came a bit unwieldy with fonts that had various size characters.
While all the fonts share a common height most are various width characters (12+ different widths in some cases) so it required sorting them into their sizes which over complicated things thanks to how the data is stored in the file. It is a very good method though Ian & thanks for suggesting it, I will definitely keep it mind for future if I need to compare images of the same dimensions like sprites/tiles for example
The checksum method I used would hardly be described as bullet proof as all it does is multiply the current pixel value by the position then add it to a running total for that character as it is being read in by the function, i.e
There is a chance that it could calculate a value that is the same as another character that increases with small fonts that are monochrome but decreases with colourfonts & larger sizes.
As of yet I have not noticed a font that gives me false duplicates, but there are a lot of fonts around so I am not relying on the current implementation being 100% effective. The good thing about using a checksum is that the method for creating it can be changed easily by just replacing the one line of code above with another method or a call to a dedicated function without affecting the rest of the code.
The function to check the dupes just compares the checksums as follows
FUNCTION check_for_dupes: Base%
FOR FirstChar% = self.LoChar TO self.HiChar-1
IF self.IsDupe%[FirstChar%] = FALSE
FOR CheckChar% = FirstChar%+1 TO self.HiChar
IF self.IsDupe%[CheckChar%] = FALSE
IF Chksum1%=Chksum2% THEN self.IsDupe%[CheckChar%] = TRUE
Thanks all for their suggestions to this problem, it is appreciated