Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2012
    Messaggi
    2

    [VB.NET] Argomento stringa deve essere maggiore di zero(?)

    Salve, avevo bisogno di aiuto con un programma che sto facendo per la scuola (3° anno di ITI Informatico) : il calcolo del codice fiscale.
    Fino al codice del comune nessun problema, e debuggando il programma funzionava perfettamente generando il codice tranne l'ultima lettera.
    Per calcolare l'ultima lettera si devono sommare i codici Ascii dei caratteri del codice fiscale in posizione pari, poi in posizione dispari, e la somma di tutti e due deve essere divisa per 26. Al resto della divisione corrisponderà una determinata lettera (in base alla tabella vista su Wikipedia ed altri siti).
    E qui arriva il problema: con un ciclo For controllo carattere per carattere il codice, facendo l'indice i mod 2 dovrei capire se si ha una posizione dispari o una pari; dopodichè se il codice ascii del carattere è minore di 65 (quindi minore della A e quindi un numero) dovrebbe procedere a sommare alla variabile "spari" (somma dei pari) il valore del numero (in questo caso 0 corrisponde a 0, 1 a 1 ecc.). Ma a fare questa operazione non ci arriva perchè si blocca alla condizione Asc(Mid(codice,i,1) < 65 , dicendo che la lunghezza dell'argomento stringa dev'essere maggiore di 0. Non capisco proprio quale sia il problema, in quanto io non vado a toccare completamente la lunghezza della stringa.
    Allego qui la parte di codice:

    ____________________________________
    Dim valori_dispari() As Integer = {1, 0, 5, 7, 9, 13, 15, 17, 21, 1, 0, 5, 7, 9, 13, 15, 17, 21, 2, 4, 18, 20, 11, 3, 6, 8, 12, 14, 16, 10, 22, 25, 24, 23}

    Dim spari, sdispari As Integer 'somma codici ascii caratteri pari e caratteri dispari

    For i = 1 To 16
    If i Mod 2 < 1 Then
    If Asc(Mid(codice, i, 1)) < 65 Then
    spari = spari + Val(Mid(codice, i, 1))
    Else
    spari = spari + (Asc(Mid(codice, i, 1)) - 65)
    End If

    Else

    If Asc(Mid(codice, i, 1)) < 57 Then
    sdispari = sdispari + valori_dispari(Val(Mid(codice, i, 1)))
    Else
    sdispari = sdispari + valori_dispari(Asc(Mid(codice, i, 1)) - 55)
    End If

    End If
    Next

    Dim sommatot As Integer = sdispari + spari
    Dim resto() As String = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"}
    Dim carattere_controllo As String = resto(sommatot Mod 26)
    codice = codice & carattere_controllo
    ____________________________________________

    Spero che mi possiate aiutare, grazie in anticipo.

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    27
    Così a prima vista, l'errore dovrebbe essere qui:

    For i = 1 To 16
    ....
    ....

    la funzione mid dovrebbe trattare la lunghezza della stringa in base a zero e non a 1, quindi all'ultimo passo del ciclo dovrebbe andare in errore; prova in questo modo:

    For i = 0 To 15

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2012
    Messaggi
    2
    Grazie del suggerimento Elioz, ma ho provato a fare anche in quel modo e da sempre lo stesso errore...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.