Which is the correct way of saying this in English?
- I haven't got any money.
- I don't have any money.
If both are correct, which is the difference between them?
Both are grammatical and both mean the same thing. Corpora show that the first is more frequent than the second in British English, but that American English has an overwhelming preference for the second.
Both are grammatically correct.
People in some countries use the first one and some people use the second one. So it's better to know both ways in order to speak to everyone. But some native speakers will say "I haven't any money" which is informal English, so if someone says it like that you have to keep in mind that it means "I haven't got any money".
The only way to say this was once a very simple one:
You can still say this today, but it sounds very formal because it is so old-fashioned. The reason this has fallen out of use is that for a long time now, English has required do support when negating any verb other than those on a short list that doesn't even include do itself (have, be, will, may, ...).
Technically, have is on the list. But it is now understood to be there only because it is an auxiliary. When you use have to express possession, it is not an auxiliary but a full verb. It seems inappropriate or awkward to grant it the privilege of negation without do support when it acts as a full verb.
There are two widespread strategies for avoiding this awkwardness:
Both ways of negating have are perfectly good English. As far as I can tell, people have a preference for one style or the other depending on where they grew up, but nobody seems to select between them to express any fine nuances of meaning. In fact, there don't seem to be any.