Catch some drug dealers (spoilers on decade-old TV show below)

In the HBO show "The Wire", the dealers use a system of encoding phone numbers where they "jump the 5" on the number pad.  

+-----------+
| 1 | 2 | 3 |
+-----------+
| 4 | 5 | 6 |
+-----------+
| 7 | 8 | 9 |
+-----------+
| # | 0 | * |
+-----------+


A "1" becomes a "9", "4" becomes "6", etc ... and "5" and "0" swap places.  So, the input number 2983794-07 becomes 8127316-53.  # and * are undefined.  Input in the show was numeric with a dash, your code does not need to preserve the dash but it does need to accept it.  No real restrictions on how user interaction is handled, can be a function or console application as needed.

Scoring criteria:

This is a code golf, fewest characters wins.  There is a 100 character penalty for solving it with a number/character swap or array lookup (I'm trying to broadly paint a brush stroke to avoid "9876043215"[i]-style lookups).  10 character bonus for not stripping dashes.
MATLAB, 25 bytes
Function accepting a string.
- is converted to =... so the dash is not just preserved, there is twice as much of it?
@(n)106-n-5*(n==48|n==53)