Scoring the postal code mismatch
If I understand you correctly, a minor modification of the absolute value should work, where you do digit-wise absolute difference and keep the magnitude:
$$
\sum_i \left| x[i] - y[i] \right| \cdot 10^{i}
$$
or in Python:
def dist(x, y):
    xs, ys = str(x), str(y)
    l = len(xs)
    diff = lambda a, b, i: abs(int(a[i]) - int(b[i])) * 10**(l-i-1)
    return sum(diff(xs,ys,i) for i in range(len(xs)))

To illustrate with your examples:
dist(111111, 111152) = 41 &gt; dist(111111, 111125) = 14

dist(111000, 110999) = 1999 &gt; dist(111000, 111001) = 1

You say (south v north) that this should be a very large diff, and that it is:
dist(123456, 223456) = 100000