SmartCard.Init
--------------

Initializes a smartcard context.

| Component | Version | macOS | Windows | Linux | Server | iOS SDK |
|---|---|---|---|---|---|---|
| [SmartCard](component_SmartCard.md) | [6.3](newinversion63.md) | ✅ Yes | ✅ Yes | ❌ No | ✅ Yes, on macOS and Windows | ❌ No |

MBS( "SmartCard.Init" ) ### Parameters

none

### Result

Returns SmartCard Context ID or error.

### Description

Initializes a smartcard context.  
Returns the ID for other [SmartCard](component_SmartCard.md) functions.  
Please call [SmartCard.Release](SmartCardRelease.md) later.  
### Examples

List readers:

 Set Variable \[$c ; Value:MBS ( "SmartCard.Init" )\]  
Set Variable \[$readers ; Value:MBS ( "[SmartCard.ListReaders](SmartCardListReaders.md)"; $c )\]  
Set Variable \[$r ; Value:MBS ( "[SmartCard.Release](SmartCardRelease.md)"; $c )\]  
Show Custom Dialog \["Readers"; $readers \]  
Connect and query value:

 If \[MBS ( "[SmartCard.Available](SmartCardAvailable.md)" ) = 1\]  
 #Start a new session  
 Set Variable \[$SCContext ; Value:MBS ( "SmartCard.Init" )\]  
 If \[MBS ( "[SmartCard.Valid](SmartCardValid.md)"; $SCContext )\]  
 #Query list of readers and pick first  
 Set Variable \[$SCReader ; Value:GetValue ( MBS ( "[SmartCard.ListReaders](SmartCardListReaders.md)"; $SCContext ) ; 1 )\]  
 If \[MBS ("IsError") = 0\]  
 # Connect to card  
 Set Variable \[$SCConnect ; Value:MBS ( "[SmartCard.Connect](SmartCardConnect.md)"; $SCContext ; $SCReader ; "Shared"; "any")\]  
 Set Variable \[$PRotocol ; Value:MBS ( "[SmartCard.GetActiveProtocol](SmartCardGetActiveProtocol.md)"; $SCContext )\]  
 If \[$SCConnect = "OK"\]  
 #Run a query  
 Set Variable \[$Result ; Value:MBS ( "[SmartCard.Transmit](SmartCardTransmit.md)"; $SCContext ; "0200000008000000"; "00ca018202"; 512 )\]  
 #Result is 4 bytes. Starts with C901 for Version 5.0 or C903 for Version 5.3   
 Show Custom Dialog \["Version"; $result \]  
 #Disconnect  
 Set Variable \[$SCDisconnect ; Value:MBS ( "[SmartCard.Disconnect](SmartCardDisconnect.md)"; $SCContext ; "Leave" )\]  
 Else  
 Show Custom Dialog \["Error"; "No card available."\]  
 End If  
 End If  
 #End Card Session  
 Set Variable \[$SCRelease ; Value:MBS ( "[SmartCard.Release](SmartCardRelease.md)" ; $SCContext )\]  
 Else  
 Show Custom Dialog \["Error"; "Failed to initalize"\]  
 End If  
Else  
 Show Custom Dialog \["Error"; "No SmartCard API on this OS."\]  
End If  
Query name from Swiss health card:

 # Initialize smart card:   
Set Variable \[ $$SmartCard ; Value: MBS ( "SmartCard.Init" ) \]   
If \[ MBS ("IsError") \]   
 Show Custom Dialog \[ "Failed to initialize SmartCard" ; $$SmartCard \]   
 Exit Script \[ Text Result: \]   
End If  
\#   
\# Connect to a reader   
Set Variable \[ $reader ; Value: "Identiv SCR3310 uTrust 2700 R" \]   
Set Variable \[ $r ; Value: MBS ( "[SmartCard.Connect](SmartCardConnect.md)"; $$SmartCard ; $Reader ; "Shared"; "any" ) \]   
If \[ MBS ("IsError") \]   
 Show Custom Dialog \[ "Connect failed" ; $r \]   
 Exit Script \[ Text Result: \]   
End If  
\#   
\# Read file from smartcard with APDU protocol.   
\#   
\# Read record with name   
Set Variable \[ $result ; Value: MBS ( "[SmartCard.ReadFile](SmartCardReadFile.md)"; $$SmartCard ; "2F06") \]   
If \[ MBS ("IsError") \]   
 Set Field \[ Card::Status ; $result \]   
 Show Custom Dialog \[ "Error" ; $result \]   
 Exit Script \[ Text Result: \]   
End If  
\# Pick result   
Set Variable \[ $filedata ; Value: Middle ( $result ; 5; Length($result ) ) \]   
\#   
\# Split in values   
Set Variable \[ $json ; Value: MBS ("[SmartCard.SplitValues](SmartCardSplitValues.md)"; $FileData ) \]   
\# Get item 128, which is full name   
Set Variable \[ $name ; Value: JSONGetElement ( $json ; "128" ) \]   
Set Variable \[ $NameList ; Value: Substitute($name ; ", "; ¶) \]   
Set Variable \[ $LastName ; Value: GetValue($nameList ; 1) \]   
Set Variable \[ $FirstName ; Value: GetValue($nameList ; 2) \]   
\#   
Show Custom Dialog \[ "Name" ; $FirstName &amp; " " &amp; $LastName \]   
Set Variable \[ $r ; Value: MBS ( "[SmartCard.Disconnect](SmartCardDisconnect.md)"; $$SmartCard ; "Eject") \]  
### See also

- [IsError](IsError.md)
- [SmartCard.Available](SmartCardAvailable.md)
- [SmartCard.Connect](SmartCardConnect.md)
- [SmartCard.Disconnect](SmartCardDisconnect.md)
- [SmartCard.GetActiveProtocol](SmartCardGetActiveProtocol.md)
- [SmartCard.ReadFile](SmartCardReadFile.md)
- [SmartCard.SplitValues](SmartCardSplitValues.md)
- [SmartCard.Transmit](SmartCardTransmit.md)
- [SmartCard.Valid](SmartCardValid.md)
- [Version](Version.md)

### Example Databases

- [CURL/WebServices/eID Auto/eID Auto v2](https://www.mbsplugins.eu/MBS-FileMaker-Plugin-Examples/CURL/WebServices/eID%20Auto/eID%20Auto%20v2.shtml#27ScriptAnchor_)
- [SmartCard/Belgian EID Reader](https://www.mbsplugins.eu/MBS-FileMaker-Plugin-Examples/SmartCard/Belgian%20EID%20Reader.shtml#4ScriptAnchor_)
- [SmartCard/eID Auto v3](https://www.mbsplugins.eu/MBS-FileMaker-Plugin-Examples/SmartCard/eID%20Auto%20v3.shtml#28ScriptAnchor_)
- [SmartCard/SmartCard ReadFile](https://www.mbsplugins.eu/MBS-FileMaker-Plugin-Examples/SmartCard/SmartCard%20ReadFile.shtml#1ScriptAnchor_)
- [SmartCard/SmartCard Signatures](https://www.mbsplugins.eu/MBS-FileMaker-Plugin-Examples/SmartCard/SmartCard%20Signatures.shtml#1ScriptAnchor_)

### Blog Entries

- [Read patient name from Swiss Health Card](https://www.mbsplugins.de/archive/2019-03-08/Read_patient_name_from_Swiss_H/monkeybreadsoftware_blog_filemaker)
- [Talking to a SmartCard in FileMaker Pro](https://www.mbsplugins.de/archive/2016-08-03/Talking_to_a_SmartCard_in_File/monkeybreadsoftware_blog_filemaker)

This function checks for a license.

Created 13th June 2016 , last changed 8th March 2019

  
[SmartCard.HeaderTemplate](SmartCardHeaderTemplate.md) - [SmartCard.ListReaderGroups](SmartCardListReaderGroups.md)

[HTML Version](SmartCardInit.shtml)