You down with OTP? Yea, you know D!

First attempt was just in a single function, I reworked it to use a more OO approach and added an interface and a static class method to clean things up.