The previous answers have provided useful information about the nature of the graph isomorphism problem, but it seems that you are also looking for a reliable algorithm to use for low-order graphs. I (among many others) have developed such an algorithm for planar triangulations that I have tested on all isomorphism classes for 4-connected planar triangulations through order 16 and all isomorphism classes for 5-connected planar triangulations through order 24. It has been implemented in APL, unfortunately not terribly useful to most users. But I thought a brief description of my algorithm might help you code your own quite quickly.
It is useful to begin by testing to see if two planar triangulations $A$ and $B$ of order $n$ are rather obviously non-isomorphic. I use the following three tests:
(a) the $n$-vector of the vertex degrees for $A$ and $B$ each in non-decreasing order; if they do not match element by element, the graphs are not isomorphic;
(b) the distributions of the degree-sums for the $3n-1$ edges in each of $A$ and $B$; if they do not match, the graphs are not isomorphic;
(c) the distributions of the degree-sums for all diamonds (4-cycles with an edge between one pair of opposite vertices) in each of $A$ and $B$; if they do not match, the graphs are not isomorphic.
If $A$ and $B$ pass these preliminary tests designed to weed out obvious non-isomorphisms, my algorithm moves on to a more detailed test of the LOCAL properties of vertices in each of $A$ and $B$. Each vertex is assigned a list of five attributes and then the $n$-item list for $A$, one item for each vertex in $A$, is compared with the $n$-item list for $B$, one item for each vertex in $B$. If there is any one-to-one matching correspondence of elements between the two lists, the two graphs are deemed to be isomorphic.
This more detailed test will produce failures for sufficiently high $n$ because the local degree properties specified in the list do not capture any aspect of graph structure at a distance greater than 4 from each vertex. However, the algorithm executes quickly and does not fail within any of the isomorphism classes I stated earlier. It may well succeed without failure for several higher orders for each connectivity, but I have not tested other than the 48,567 distinct triangulations in those classes.
Here is the list of five attributes I associate with each vertex $v$:
The degree $k$ of $v$.
The degree-sum for all the vertices in the $2k$-cycle of vertices that I call the "Sheriff's Badge" centered on $v$, a particular cycle which I shall define following the presentation of this list of vertex attributes.
The ordered sequence of length $2k$ of degrees of the vertices in the Sheriff's Badge. By ordered, I mean the sequence of degrees for the vertices in the cycle followed in one direction or the other around the cycle from a designated starting vertex in the cycle.
For each vertex in the Sheriff's Badge cycle, the degree-sum of its adjacent vertices that are neither $v$ nor any vertex in the Sheriff's badge itself. This attribute is represented as an ordered sequence, a $2k$-vector, each element a degree-sum.
The ordered sequence of item 2, a $2k$-vector, one element for each vertex in the Sheriff's Badge cycle.
The Sheriff's Badge for any vertex $v$ is determined by first determining the cycle $C$ adjacent to $v$ and then for each edge $xy$ in $C$ determining the vertex $w$ that forms the diamond $xwyv$. Let $v_1, v_2, ... , v_k$ represent the ordered sequence of vertices defining $C$, with $v_1$ the designated starting vertex. Thus, the various vertices labeled $w$ represent the "points" of the Sheriff's Badge: $w_1$ completes the diamond for edge $v_1v_2$, $w_2$ completes the diamond for edge $v_2v_3$, and so on, until $w_k$ completes the diamond for edge $v_kv_1$. It does not matter if several consecutive $w$ represent the same vertex; we do not eliminate duplicates. The Sheriff's Badge cycle is the ordered sequence $v_1, w_1, v_2, w_2, ... , v_k, w_k$.
In comparing the three cycles (those in items 3, 4, and 5) associated with each vertex in $B$ with the same three cycles with a vertex in $A$, it is necessary to test all possible rotations of the sequence of the cycles for $B$ (i.e. one position to the right, two positions to the right, and so on, with the identical rotation for all three cycles) with the cycles fixed as defined for $A$. It is also necessary to test such rotations for the cycles in $B$ in reverse order as well as forward order because they may have been computed for $B$ in the opposite sense of traversing the cycles in $A$. These comparisons are all handled trivially in APL.