I'm writing some software to automatically compute things like Alexander modules, Alexander ideals, Milnor signatures and Farber-Levine pairings for 1 and 2-knot complements.   So among other things I'd like to have a quick way of comparing ideals in the Laurent polynomial ring $\mathbb Z[t^{\pm 1}]$.  

So my question:

Is there an efficient way of determining whether or not two  ideals in $\mathbb Z[t^{\pm 1}]$ are equal?  What's the most pleasant procedure you can think of? 

My ideals are given by a finite number of generators. 

The knot theory literature tends to stop at "$\mathbb Z[t^{\pm 1}]$ *isn't a PID*" but I'm hopeful there's some reasonable tools out there.  Understanding ideals in $\mathbb Z[t^{\pm 1}]$ is essentially the same thing as understanding cyclic group actions on finitely generated abelian groups so I could imagine answers might be more complicated than I like.  But I hope to be pleasantly surprised by some sort of "division algorithm + details" type algorithm. 

For example, is there a better way to go about this problem than:

Given an ideal $I \subset \mathbb Z[t^{\pm 1}]$, consider the finitely-generated abelian group $G = \mathbb Z[t^{\pm 1}]/I$ together with the action of $\mathbb Z$ on $G$ given by multiplication by $t$.  We want to determine $G$ as a $\mathbb Z$-module.  So presumably you would do this on the $\mathbb Z$-torsion subgroup of $G$ (call it $\tau G$), then work out the conjugacy class of the action of $\mathbb Z$ on $G/\tau G$ (which amounts to the conjugacy problem in $GL_n(\mathbb Z)$), then there would be an extension problem to deal with.  

I'm hoping there's a simpler way to deal with this problem -- simpler in the sense of implementation.