And then your code would still need a table mapping the string to the implementation.
yep, exactly :)
Yes, but that's just one table - for implementations that are supported by code. I don't need the table to just understand what this hash is - only to verify it. And, if I want to add my private hash, I don't need to update shared tables and be worried some other hash would have the same ID as mine. I can just use reasonably unique string.
But at least you could work out the mapping in your head, without having to refer to a numeric table.
It still needs a table, but it doesn't need consensus on what those names mean.
If someone says "sha2", that doesn't mean bcrypt, after all!