+370 formato keitimas į 8 automatizavimo galimybės

Lietuvoje telefono numerių formatavimas – tai kasdienė problema, su kuria susiduria tiek programuotojai, tiek duomenų analitikai. Ypač dažnai tenka konvertuoti tarptautinius +370 formato numerius į vietinius aštuonių skaitmenų numerius. Šis procesas gali atrodyti paprastas, tačiau praktikoje kyla nemažai iššūkių, kuriuos galima elegantiškai išspręsti automatizavimo pagalba.

Kodėl formato keitimas taip aktualus

Dirbant su Lietuvos duomenų bazėmis ar integruojant skirtingas sistemas, dažnai susiduriam su situacija, kai vienoje vietoje numeriai saugomi +370 formatu, o kitoje – aštuonių skaitmenų. CRM sistemos, apskaitos programos, marketingo platformos – visos jos gali naudoti skirtingus standartus.

Pavyzdžiui, importuojant kontaktus iš Google Contacts į vietinę sistemą, numeriai ateina +370 61234567 formatu, tačiau SMS siuntimo platforma tikisi gauti 61234567. Rankiniu būdu keisti šimtus ar tūkstančius įrašų – ne tik neefektyvu, bet ir klaidinga.

Be to, skirtingi formatai apsunkina duomenų analizę. Bandant surasti dublikatus ar susieti klientų duomenis iš skirtingų šaltinių, sistema gali nepastebėti, kad +370 61234567 ir 61234567 – tai tas pats numeris.

Programavimo sprendimai Python kalba

Python programuotojai gali pasinaudoti keliais metodais numerių konvertavimui. Paprasčiausias būdas – naudoti string manipuliacijas:

def convert_phone_number(phone):
    # Pašaliname tarpus ir brūkšnelius
    clean_phone = phone.replace(" ", "").replace("-", "")
    
    # Tikriname ar prasideda +370
    if clean_phone.startswith("+370"):
        return clean_phone[4:]  # Pašaliname +370
    elif clean_phone.startswith("370"):
        return clean_phone[3:]  # Pašaliname 370
    
    return clean_phone  # Grąžiname nepakeistą, jei neatitinka formato

Tačiau profesionalesniam sprendimui rekomenduoju naudoti phonenumbers biblioteką, kuri tiksliau apdoroja įvairius numerių formatus:

import phonenumbers
from phonenumbers import NumberParseException

def advanced_phone_convert(phone_string):
    try:
        # Parsiname numerį nurodydami Lietuvos regioną
        parsed = phonenumbers.parse(phone_string, "LT")
        
        # Tikriname ar numeris validus
        if phonenumbers.is_valid_number(parsed):
            # Konvertuojame į nacionalinį formatą be tarpų
            national = phonenumbers.format_number(parsed, 
                      phonenumbers.PhoneNumberFormat.NATIONAL)
            return national.replace(" ", "").replace("-", "")
        
    except NumberParseException:
        return None
    
    return None

Excel ir Google Sheets automatizavimas

Ne visi IT specialistai dirba su programavimo kalbomis. Dažnai duomenų apdorojimas vyksta Excel ar Google Sheets aplinkose. Čia taip pat galima sukurti efektyvius automatizavimo sprendimus.

Excel formulė numerių konvertavimui:

=IF(LEFT(A1,4)="+370",RIGHT(A1,LEN(A1)-4),
   IF(LEFT(A1,3)="370",RIGHT(A1,LEN(A1)-3),A1))

Ši formulė tikrina, ar numeris prasideda +370 arba 370, ir atitinkamai pašalina prefiksą. Google Sheets veiks ta pati logika.

Sudėtingesniems atvejams galima naudoti reguliariuosius išraiškų (regex). Google Sheets palaiko REGEXREPLACE funkciją:

=REGEXREPLACE(A1,"^\+?370",""))

Šis sprendimas pašalins tiek +370, tiek 370 prefiksus, nepriklausomai nuo to, ar yra pliuso ženklas.

Duomenų bazių automatizavimas

Dirbant su dideliais duomenų kiekiais, efektyviausia konvertavimą atlikti tiesiogiai duomenų bazės lygmenyje. SQL užklausos leidžia apdoroti milijonus įrašų per kelias sekundes.

MySQL/MariaDB sprendimas:

UPDATE contacts 
SET phone_local = CASE 
    WHEN phone LIKE '+370%' THEN SUBSTRING(phone, 5)
    WHEN phone LIKE '370%' THEN SUBSTRING(phone, 4)
    ELSE phone 
END
WHERE phone IS NOT NULL;

PostgreSQL variantas su regex:

UPDATE contacts 
SET phone_local = REGEXP_REPLACE(phone, '^\+?370', '')
WHERE phone ~ '^\+?370';

Prieš vykdant tokias užklausas produkcinėje aplinkoje, būtinai sukurkite duomenų atsarginę kopiją ir išbandykite SELECT užklausą:

SELECT phone, 
       REGEXP_REPLACE(phone, '^\+?370', '') as converted_phone
FROM contacts 
WHERE phone ~ '^\+?370'
LIMIT 10;

API ir mikroservisų integracijos

Modernūs IT sprendimai dažnai remiasi mikroservisų architektūra. Telefono numerių konvertavimas gali būti iškeltas į atskirą servisą, kurį galės naudoti visos organizacijos sistemos.

Štai Node.js Express serverio pavyzdys:

const express = require('express');
const app = express();

app.use(express.json());

app.post('/convert-phone', (req, res) => {
    const { phone } = req.body;
    
    if (!phone) {
        return res.status(400).json({ error: 'Phone number required' });
    }
    
    let converted = phone.replace(/\s|-/g, ''); // Pašaliname tarpus ir brūkšnelius
    
    if (converted.startsWith('+370')) {
        converted = converted.substring(4);
    } else if (converted.startsWith('370')) {
        converted = converted.substring(3);
    }
    
    // Validuojame rezultatą
    if (!/^[6-9]\d{7}$/.test(converted)) {
        return res.status(400).json({ error: 'Invalid Lithuanian phone number' });
    }
    
    res.json({ 
        original: phone, 
        converted: converted,
        valid: true 
    });
});

app.listen(3000);

Toks mikroservisas gali būti naudojamas bet kurioje sistemoje per HTTP užklausas, o validacijos logika lieka centralizuota vienoje vietoje.

Masinio apdorojimo strategijos

Kai reikia apdoroti šimtus tūkstančių ar milijonus numerių, svarbu pasirinkti tinkamą strategiją. Čia keletas patikrintų metodų:

Batch apdorojimas – duomenis skaidome į mažesnius blokus po 1000-10000 įrašų ir apdorojame palaipsniui. Tai apsaugo nuo atminties trūkumo ir leidžia stebėti progresą.

Parallel processing – naudojame kelis CPU branduolius arba thread’us. Python multiprocessing biblioteka puikiai tinka tokiems uždaviniams:

from multiprocessing import Pool
import pandas as pd

def process_chunk(phone_list):
    return [convert_phone_number(phone) for phone in phone_list]

def mass_convert(phone_numbers, chunk_size=10000):
    # Skaidome į blokus
    chunks = [phone_numbers[i:i+chunk_size] 
              for i in range(0, len(phone_numbers), chunk_size)]
    
    # Apdorojame lygiagrečiai
    with Pool() as pool:
        results = pool.map(process_chunk, chunks)
    
    # Sujungiame rezultatus
    return [phone for chunk in results for phone in chunk]

Streaming apdorojimas – kai duomenų per daug atminčiai, skaitome ir apdorojame po vieną eilutę:

def stream_convert_csv(input_file, output_file):
    with open(input_file, 'r') as infile, open(output_file, 'w') as outfile:
        reader = csv.reader(infile)
        writer = csv.writer(outfile)
        
        for row in reader:
            if len(row) > 0:  # Tikriname ar yra telefono numeris
                row[0] = convert_phone_number(row[0])
            writer.writerow(row)

Praktiniai patarimai ir spąstai, kurių reikia vengti

Automatizuojant numerių konvertavimą, svarbu atsiminti kelis praktinių aspektus. Visų pirma, ne visi numeriai, prasidedantys +370, yra mobiliojo ryšio numeriai. Lietuvoje fiksuotojo ryšio numeriai taip pat naudoja šį prefiksą, tačiau jų struktūra skiriasi.

Mobilieji numeriai prasideda 6, 7, 8 arba 9, o fiksuotieji – kitais skaitmenimis. Jei jūsų sistema dirba tik su mobiliaisiais numeriais, pridėkite papildomą validaciją:

def is_mobile_number(phone):
    clean_phone = phone.replace(" ", "").replace("-", "")
    if clean_phone.startswith("+370"):
        local_part = clean_phone[4:]
    elif clean_phone.startswith("370"):
        local_part = clean_phone[3:]
    else:
        local_part = clean_phone
    
    return len(local_part) == 8 and local_part[0] in ['6', '7', '8', '9']

Kitas svarbus aspektas – duomenų kokybė. Realūs duomenys dažnai būna „purini”: su tarpais, brūkšneliais, skliausteliais. Prieš konvertuojant, būtinai išvalykite duomenis:

import re

def clean_phone_number(phone):
    if not phone:
        return ""
    
    # Pašaliname visus ne-skaičių simbolius, išskyrus +
    cleaned = re.sub(r'[^\d+]', '', str(phone))
    return cleaned

Dar vienas dažnas klaidų šaltinis – neteisingas duomenų tipas. Excel failuose numeriai kartais interpretuojami kaip skaičiai, todėl prarandamas pliuso ženklas. Visada importuokite telefono numerius kaip tekstą.

Testavimas – kritiškai svarbus etapas. Sukurkite testų duomenų rinkinį su įvairiausiais formatais:

  • +370 612 34567
  • +37061234567
  • 370 61 234 567
  • 8-612-34567 (senas formatas)
  • +370 (61) 234-567

Patikrinkite, ar jūsų algoritmas teisingai apdoroja visus šiuos variantus.

Kada automatizavimas atsipirks ir kaip matuoti sėkmę

Automatizavimo projektų vertė ne visada akivaizdi. Telefono numerių konvertavimo atveju, naudą galima matuoti keliais būdais.

Laiko ekonomija – jei darbuotojas per valandą gali rankiniu būdu apdoroti 200 numerių, o automatizuotas sprendimas – 10000 per minutę, ekonomija akivaizdi. Tačiau nepamirškite įskaičiuoti laiko, reikalingo sprendimo sukūrimui ir palaikymui.

Klaidų sumažinimas – žmogiškos klaidos kainuoja brangiai. Neteisingas telefono numeris reiškia nepasiekiamą klientą, prarasta pardavimo galimybė ar nesėkmingas SMS siuntimas. Automatizuotas sprendimas su tinkama validacija praktiškai eliminuoja tokias klaidas.

Skalabilumas – rankiniu būdu apdoroti 1000 numerių dar įmanoma, bet ką daryti su 100000? Automatizuotas sprendimas apdoroja bet kokį kiekį vienodai efektyviai.

Sėkmės matavimui naudokite šiuos KPI:

  • Apdorojimo greitis – numerių per minutę/valandą
  • Tikslumas – teisingai konvertuotų numerių procentas
  • Sistemos prieinamumas – uptime procentas (jei naudojate API)
  • Klaidų lygis – nevalidžių numerių procentas po konvertavimo

Investicija į automatizavimą atsipirks, jei reguliariai apdorojate daugiau nei 500-1000 numerių per mėnesį arba jei duomenų kokybė kritiškai svarbi jūsų verslui.

Telefono numerių formato keitimas iš +370 į aštuonių skaitmenų formatą gali atrodyti kaip techninis smulkmenas, tačiau tinkamas automatizavimas gali sutaupyti daug laiko ir išvengti brangių klaidų. Nesvarbu, ar naudojate Python skriptus, Excel formules, ar kuriate mikroservisus – svarbu pasirinkti sprendimą, atitinkantį jūsų poreikius ir techninius gebėjimus. Pradėkite nuo paprastų sprendimų ir palaipsniui plėskite funkcionalumą, kai atsiras poreikis. Gerai suprojektuotas automatizavimo sprendimas ne tik išspręs dabartines problemas, bet ir prisitaikys prie ateities iššūkių.

Daugiau

VPN paslaugų pasirinkimas saugumo kriterijai ir greitis