Let K be a number field, let A be a finite-dimensional K-algebra, let
$\operatorname {\mathrm {J}}(A)$
denote the Jacobson radical of A and let
$\Lambda $
be an
$\mathcal {O}_{K}$
-order in A. Suppose that each simple component of the semisimple K-algebra
$A/{\operatorname {\mathrm {J}}(A)}$
is isomorphic to a matrix ring over a field. Under this hypothesis on A, we give an algorithm that, given two
$\Lambda $
-lattices X and Y, determines whether X and Y are isomorphic and, if so, computes an explicit isomorphism
$X \rightarrow Y$
. This algorithm reduces the problem to standard problems in computational algebra and algorithmic algebraic number theory in polynomial time. As an application, we give an algorithm for the following long-standing problem: Given a number field K, a positive integer n and two matrices
$A,B \in \mathrm {Mat}_{n}(\mathcal {O}_{K})$
, determine whether A and B are similar over
$\mathcal {O}_{K}$
, and if so, return a matrix
$C \in \mathrm {GL}_{n}(\mathcal {O}_{K})$
such that
$B= CAC^{-1}$
. We give explicit examples that show that the implementation of the latter algorithm for
$\mathcal {O}_{K}=\mathbb {Z}$
vastly outperforms implementations of all previous algorithms, as predicted by our complexity analysis.