Home-grown encryption/decryption function
The main shortcoming of this algorithm is that it relies solely on security through obscurity. 

Since you save all information to reconstruct the plain-text string in the encrypted string, the only information keeping that encrypted string safe is the fact that an attacker has to know how to get the decrypted string from it. This is inherently unsafe.



As an attacker (who does not know the algorithm, but can use the encrypt function), one could note the following features:


The encrypted string is always six times longer than the plain-text, so a good guess would be that each block of six characters encodes one character.
The second character of that block is always a number, so it is probably not a function that transforms a single character to six random looking characters.
At this point it becomes a game of finding correlations between the characters in the encrypted string and the plain text. A common strategy would be seeing which offset would be needed to get a certain character in the encrypted string. This would lead to the finding that the offset is actually in the encrypted string and your "encryption" is broken.