I've used this algorithm for random shuffing;

Make array, Card(1, 2, ... ,n)
for i=0 to n{
Generate random number j
Swap Card(i) and Card(j)
}

But I got suspicious about this algorithm recently when i did a test for new game. Is it enough for completely random shuffle? Or does anyone know more powerful algorithm?