Αριθμοί Κυκλοφορίας

Μια απλή κλάση που τροποποιεί τους αριθμούς κυκλοφορίας ώστε να μείνουν μόνο οι επιτρεπτοί χαρακτήρες για τους αριθμούς κυκλοφορίας στις ελληνικές πινακίδες. Οι ελληνικοί χαρακτήρες που δεν υπάρχουν στο λατινικό αλφάβητο αφαιρούνται, και όσοι μένουν μετατρέπονται στον αντίστοιχο (οπτικά) λατινικό χαρακτήρα.
Οι λατινικοί μένουν όπως είναι, αφού αφορούν πινακίδες ξένων κρατών.
Αν τώρα υπάρχουν πινακίδες με αραβικά γράμματα, ταϊλανδέζικα, κινέζικα, κ.λπ. δεν έχω δει, οπότε κάνουμε τον κινέζο. :)

    public class Plates
    {
        protected static readonly string alternateWildcards = "*?";
        protected static readonly string validWildcards = "%_^[]-";

        protected static readonly string validChars = "ΑΒΕΖΗΙΚΜΝΟΡΤΥΧΆΈΊΌΪABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890/";
        protected static string charGR = "ΑΒΕΖΗΙΚΜΝΟΡΤΥΧΆΈΊΌΪ";
        protected static char[] charUS = "ABEZHIKMNOPTYXAEIOI".ToCharArray();

        public static string Normalize(string platesNo)
        {
            return Normalize(platesNo, false);
        }

        public static string Normalize(string platesNo, bool allowWildcards)
        {
            string allowChars;
            if (allowWildcards)
            {
                allowChars = validWildcards + validChars;
                //Replace alternate wildcards with normal wildcards
                // * -> %
                // ? -> _
                for (int i = 0; i < alternateWildcards.Length; i++)
                {
                    platesNo = platesNo.Replace(alternateWildcards[i],
                                                validWildcards[i]);
                }
            }
            else
            {
                allowChars = validChars;
            }
            StringBuilder sb = new StringBuilder();
            int start = 0;
            char[] chPlatesNo = platesNo.ToUpperInvariant().ToCharArray();
            foreach (char ch in chPlatesNo)
            {
                if (allowChars.IndexOf(ch, start) >= start)
                {
                    int x = charGR.IndexOf(ch);
                    if (x >= 0)
                    {
                        sb.Append(charUS[x]);
                    }
                    else
                    {
                        sb.Append(ch);
                    }
                }
            }
            return sb.ToString();
        }
    }
About these ads

Υποβολή απάντησης

Εισάγετε τα παρακάτω στοιχεία ή επιλέξτε ένα εικονίδιο για να συνδεθείτε:

WordPress.com Logo

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό WordPress.com. Log Out / Αλλαγή )

Twitter picture

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Twitter. Log Out / Αλλαγή )

Facebook photo

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Facebook. Log Out / Αλλαγή )

Google+ photo

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Google+. Log Out / Αλλαγή )

Σύνδεση με %s