Lots of errors in your code. Mine is basically the same that @frarugi87's answer.
I only have to add: when reading serial, wait for the end of line ('\r' and/or '\n') to know when you have all your data, so you don't depend on length (which can be corrupted).
Edit (on Majeko's comment)
String code, rs1, rs2, rs3, readString;
void setup()
{
Serial.begin(9600);
Serial.println("Serial ready!");
}
void loop()
{
static bool inData = true;
while (Serial.available()) {
char c = (char) Serial.read();
if (c != '\r' && c != '\n') {
readString += c;
inData = true;
}
else {
if (inData) {
rs1 = readString.substring(0, 3); //034
rs2 = readString.substring(3, 6); //000
rs3 = readString.substring(6, 9); //017
code = rs1 + rs2 + rs3;
Serial.println(code);
if (code.equals("034000017")) {
Serial.println("OK");
}
readString = "";
inData = false;
}
}
}
}
This code works for any configuration of line ending ('\r', '\n' or '\r\n').
It doesn't test for length (or validity or timeout); it's left as an exercise to the reader :-)
I hope it shows how code grows when making it robust in all scenarios.