Elfproef in Java (geen internet script)

Status
Niet open voor verdere reacties.

Gregyor

Terugkerende gebruiker
Lid geworden
28 nov 2002
Berichten
1.113
Ik ben bezig met een Java code.
Dit vanwege een opdracht die ik moet uitvoeren.
Ik ben absoluut geen programmeur en weet (na het fabricaat hieronder) dat ik het ook NOOIT ga worden.

Moet zeggen dat ik tot nu toe redelijk ver ben gekomen, echter bij het berekenen gaat het nog niet goed.
Wie kan mij net dat laatste duwtje geven?

Code:
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

/**
 *
 * @author jkliuj
 */
public class Elfproef extends JFrame 
    implements ActionListener{
    private JLabel inputLabel;
    private JTextField inputField;
    private JButton button;
    
    private int aantal_tekens;
    private boolean bResultaat = false;   

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
       Elfproef frame = new Elfproef();
       frame.setSize (250,350);
       frame.createGUI();
       frame.setVisible(true);
      }
    
    
    private void createGUI() {
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        Container window = getContentPane();
        window.setLayout(new FlowLayout());
        
        inputLabel = new JLabel("Voer Bankrekeningnummer in");
        window.add(inputLabel);
        
        inputField = new JTextField("1234567890");
        window.add(inputField);
        
        button = new JButton("Bereken Elfproef");
        button.addActionListener(this);
	window.add(button);

		
    }
    
    public void actionPerformed(ActionEvent event) {
        //inputField=inputField.replace("/\\D/", "");
	String strVal = inputField.getText();
	strVal = strVal.replace("/\\D/", "");
	inputField.setText(strVal);
	aantal_tekens=strVal.length();
	
	int som=0;
	// loop door de 9 cijfers met de 11 proef formule
	for (int i=0; i<aantal_tekens; i++) {
		int getal=strVal.charAt(i);
		som+=getal*(aantal_tekens-i);
	} 
	// geef resultaat van check terug
	int mod = som % 11;
	if (mod==0 && aantal_tekens==9) {
		bResultaat = true;
	} else {
		bResultaat = false;
	}
	System.err.println("Resultaat berekening: " + bResultaat);
	System.err.println("Aantal tekens: " + aantal_tekens);
	System.err.println("Som: " + som);
	System.err.println("Modulo " + mod);
    }
}

Bij voorbaat hartstikke dank.
 

Bijlagen

Wat gaat er precies mis? een error of verkeerde berekening?

gaat dit goed: "int getal=strVal.charAt(i);" ? Als dit een char conversie is staat er waarschijnlijk iets heel anders in "getal" dan je verwacht.
 
Als voorbeeld heb ik mijn eigen rekeningnummer ingevuld, ik verwacht dan een true te krijgen.
Echter krijg ik een false.
Hij doet dus daadwerkelijk een berekening, maar het resultaat is anders dan ik verwacht.

Zoals ik al aangaf ik ben een N00B als het om programmeren gaat.
 
Wat geeft je totale "SOM"? is dat in lijn met wat je zelf even berekend? an sich lijkt er met de berekening niet veel fout te zijn
 
Op de PC waar ik nu achter zit heb ik geen Java tot mijn beschikking, ik probeer dit vanavond thuis even.
 
Let op er zijn twee controle getalen (die de rest weergeven) het wil zeggen dat het niet deelbaar is maar een controle gedaan word
 
Hoi,
als ik het programma uitvoer met mijn rekeningnummer krijg ik het resultaat:

Resultaat berekening: false
Aantal tekens: 9
Som: 1943
Modulo 7

Let op er zijn twee controle getalen (die de rest weergeven) het wil zeggen dat het niet deelbaar is maar een controle gedaan word
Bedankt voor het opmerken, alleen snappen doe ik het niet (dit ligt wrs aan het feit dat mijn hart er niet bij ligt).
 
Ik verwacht de som 242 en als je dat deelt door 11 als resultaat 22 geeft.
Zie ook de link van Theo Theunissen, alleen is dit een script en geen code.

Wel heb ik mijn code gebaseerd op die van deze site.
 
voor belgie is het dit , maar dan in php met een beetje verbouwen kan je het in java maken

if(strlen($bankrekeningnummer)==9){
for ($i=0; $i<=8; $i++){
$som += ($bankrekeningnummer[$i] * (9 - $i));
}
return ($som % 11 == 0);//valid invalid
}
return false;
 
Gezien de som zit de fout hier (zoals ik vermoedde)

int getal=strVal.charAt(i);

Je haalt momenteel de ASCII waarde op van het getal maar niet de integer.

0 = 48
1 = 49
etc.

Je moet een parse of converter functie hebben om dit juist te converteren.
 
ik veronderstel dat je het weet maar geef toch info over
ref:http://www.tutorialspoint.com/java/number_parseint.htm
Code:
public class Test{ 
   public static void main(String args[]){
      int x =Integer.parseInt("9");
      double c = Double.parseDouble("5");
      int b = Integer.parseInt("444",16);

      System.out.println(x);
      System.out.println(c);
      System.out.println(b);
   }
}
 
Beste Wampier en kenikavanbis,

hartelijk dank voor de richtingen die jullie mij hebben gegeven.
Vanuit onverwachte hoek ook hulp gekregen. Het script is nu af, ik kan jullie melden dat ik daar erg blij mee ben.

gr. Greg
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan