Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: Pankkiviivakoodi (Crystal Syntax)

Sorrowind [02.07.2007 08:35:47]

#

Koodi tarkistaa pankkiviivakoodin, laittaa sen oikeaan muotoon ja tulostaa lomakkeelle. Pankkiviivakoodi on ennen käyttöönottoa tarkistutettava pankissa, että se toimii oikein. Tälle minun koodipätkälle on tullut pankista hyväksyn ja sitä saa käyttää.
Olen tehnyt koodin pätkän Crystal Report Design 10:lla, mutta koodi toimii varmasti muissakin vastaavissa ohjelmissa jotka tukevat Visual Basicia ja Crystal Syntaxia. Funktion perässä suluissa lukee mitä syntaksia tulee käyttää, että se toimii, lisäksi tarvitset fontin JLCode128, että saat muodostettua viivakoodin oikein.
Tässä on tietoa pankkiviivakoodista, sivulla 4 on miten se muodostuu:
http://www.pankkiyhdistys.fi/sisalto/upload/pdf/pviivakoodistd.pdf
Kannattaa lukea ennen kun alkaa koodia lukemaan, muuten voi olla pikkaisen pihalla
Tuskin tästä on kenellekään hirveätä hyötyä, tai jos tekee lomakkeita niin siinä tapauksessa.

Toivottavasti tästä on hyötyä jollekin.

fcViivaKoodi (Basic Syntax

Function fcViivaKoodi(koodi as string) as string

    'Koodin oltava alussa 53 merkkiä pitkä, muuten jotain puuttuu
    if Len(koodi) <> 53 then
        fcViivaKoodi = ""
        exit function
    end if

    '======================='
    '===== TARKISTE 01 ====='
    '======================='
    Dim arvo, i, paino, luku As number
    dim paluu as string
    dim Tarkiste01 as string

    paino = 7
    arvo = 0

    '-- Lasketaan arvo painoarvoilla 7-3-1 lopusta lähtien
    For i = Len(koodi) To 1 Step -1
        luku = ToNumber(Mid(koodi, i, 1))
        arvo = arvo + (luku * paino)
        Select Case paino
        Case 7
            paino = 3
        Case 3
            paino = 1
        Case Else
            paino = 7
        End Select
    Next i

    '-- Tarkiste saadaan vähentämällä 10:stä yllä lasketun arvon yksittäisluku
    '-- Esim. jos arvo 123, niin tarkiste = 10 - 3 = 7
    Tarkiste01 = Left(ToText(10- Val(Mid(ToText(arvo), Len(ToText(arvo))-3,1))),1)

    '=== TARKISTE 01 END ==='

    koodi = koodi & tarkiste01

    '======================='
    '===== TARKISTE 02 ====='
    '======================='
    dim j, k as number
    dim tarkTemp02 as string
    dim tarkiste02 as string
    dim arvoTemp as string

    '-- Tarkiste saadaan laskemalla koodin luvut kertoimilla yhteen
    '-- kahden pareissa ja lopuksi jakolaskun jakojäännöksestä
    arvo = 105
    k = 1
    for i = 0 to Len(koodi) step 2
        luku = Val(Mid(koodi, i + 1, 2))
        arvo = arvo + luku * k
        k = k + 1
    next i
    arvoTemp = ToText(arvo Mod 103)

    '-- Kikkaillaan luku oikeaan muotoon poistamalla desimaalit
    tarkTemp02 = "00"
    For i = 1 To Len(arvoTemp)
        if mid(arvoTemp,i,1) = "," then
            exit for
        end if
        tarkTemp02 = tarkTemp02 & mid(arvoTemp,i,1)
    next i
    Tarkiste02 = right(tarkTemp02,2)

    '=== TARKISTE 02 END ==='

    koodi = koodi & tarkiste02

    '==================='
    '=== VIIVAKOODI ===='
    '==================='
    dim Viivakoodi as string
    dim Luvut as string

    Viivakoodi = chr(202)   'Alkumerkki

    '-- Lukuja yht. nyt 56 kpl (53+tarkiste01+tarkiste02),
    '-- käydään kahden pareissa läpi ja muodostetaan näistä viivakoodimerkit
    i = 1
    do until i > len(koodi)

        Luvut = mid(koodi,i,2)
        If Luvut = "00" then
            Viivakoodi = Viivakoodi & chr(204)
        Elseif val(luvut) > 94 then
            Viivakoodi = Viivakoodi & chr(val(Luvut)+97)
        else
            Viivakoodi = Viivakoodi & chr(val(Luvut)+32)
        End If

        i = i + 2
    loop

    Viivakoodi = Viivakoodi & chr(203)  'Lisätään vielä loppumerkki

    fcViivakoodi = Viivakoodi

end function

Crystal Syntax

Iif(Right({pohja.summakenttä},1) Like "-","0,00",{pohja.summakenttä})
// Tässä poistetaan oikealta alkaen ylimääräiset merkit, viivakoodissa ei saa olla kuin numeroita. Nimetty sen takia 74:ksi kun kenttä mistä haki tiedon on 74, nimellä ei väliä kunhan se löytyy sitten Viivakoodista samalla nimellä.

Test (Crystal Syntax

fcViivaKoodi("2"+"0000000000000"+right(Picture(Replace(Replace({@74},",",""),".",""),'00000000'),8)+Replace(RIGHT(Picture({pohja.viitekenttä},"00000000000000000000"),21)," ","")+Mid({pohja.eräpäiväkenttä},7,2)+Mid({pohja.eräpäiväkenttä},4,2)+Mid({pohja.eräpäiväkenttä},1,2)+"0000")
// On sitä varten olemassa, että näkee millaisen numerosarjan pukkaa pihalle.
//Tuo 14:sta 0:llaa tulee korvata tilinumerolla.

Viivakoodi (Crystal Syntax

fcViivaKoodi("2"+"0000000000000"+right(Picture(Replace(Replace({@74},",",""),".",""),'00000000'),8)+Replace(RIGHT(Picture({pohja.viitekenttä},"00000000000000000000"),21)," ","")+Mid({pohja.eräpäiväkenttä},7,2)+Mid({pohja.eräpäiväkenttä},4,2)+Mid({pohja.eräpäiväkenttä},1,2)+"0000")
//Tämä tulee sitten muuntaa sillä JLCode128 viivakoodiksi.
//Tuo 14:sta 0:llaa tulee korvata tilinumerolla.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta